C++ C++;集装箱';迭代器

C++ C++;集装箱';迭代器,c++,stl,iterator,C++,Stl,Iterator,这个问题听起来可能有点站不住脚,但我还没有找到明确的答案。我可以假设,由map的find()方法返回的迭代器将指向相同的数据,即使我将向相同的map添加(或删除)其他元素?我不清楚map的迭代器是否指向map中的位置或特定数据…您可以在insert或erase操作后继续使用相同的迭代器。本标准规定(C++03标准,第23.1.2节,第8段): insert成员不得影响迭代器和容器引用的有效性,以及erase 成员应仅使迭代器和对已删除元素的引用无效 这适用于所有关联容器(map,set,mult

这个问题听起来可能有点站不住脚,但我还没有找到明确的答案。我可以假设,由
map
find()
方法返回的迭代器将指向相同的数据,即使我将向相同的
map
添加(或删除)其他元素?我不清楚
map
的迭代器是否指向
map
中的位置或特定数据…

您可以在
insert
erase
操作后继续使用相同的迭代器。本标准规定(C++03标准,第23.1.2节,第8段):

insert成员不得影响迭代器和容器引用的有效性,以及erase 成员应仅使迭代器和对已删除元素的引用无效


这适用于所有关联容器(
map
set
multimap
multiset
)。

+1供权威参考(另一个:)。它是否也尝试TR1容器,如无序的\u-map?我假设C++0x不会更改迭代器定义,因为它会破坏兼容性?@Goofy:您需要检查您感兴趣的特定容器的要求。例如,上面引用的保证也适用于std::list,但不适用于std::deque或std::vector。@Goofy:
无序映射
的工作方式不同。
insert
操作可能会使所有迭代器无效,但
erase
操作不会。兼容性不是问题,因为
unordered\u map
并不意味着与
map
兼容。