第23.1.2节#8(关联容器要求):
插入成员不应影响迭代器和对容器的引用的有效性,并且擦除成员应仅使迭代器和对已擦除元素的引用无效.
所以是保证指向map元素的数据成员的指针保证有效,除非你删除该元素.
第23.1.2节#8(关联容器要求):
插入成员不应影响迭代器和对容器的引用的有效性,并且擦除成员应仅使迭代器和对已擦除元素的引用无效.
所以是保证指向map元素的数据成员的指针保证有效,除非你删除该元素.
首先,地图保证稳定; 即迭代器不会因元素插入或删除而失效(当然要删除的元素除外).
但是,迭代器的稳定性并不能保证指针的稳定性!尽管通常会发生大多数实现使用指针 - 至少在某种程度上 - 来实现迭代器(这意味着假设您的解决方案可以正常工作),您应该真正存储的是迭代器本身.
你可以做的是创建一个小对象,如:
struct StringPtrInMap { typedef std::map::iterator iterator; StringPtrInMap(iterator i) : it(i) {} const string& operator*() const { return it->first; } const string* operator->() const { return &it->first; } iterator it; }
然后存储而不是字符串指针.