在使用相同的键迭代元素时插入到unordered_multimap是否安全?

时间:2017-12-12 10:45:52

标签: c++11 g++ clang

我在不同平台和不同编译器(clang和g ++)上遇到此代码的不同行为。对于Linux上的g ++,这段代码似乎没有问题。两次迭代后留下内部循环。但是在Mac OS上使用clang,内部循环似乎找不到t=# select * from so4; i | addr ---+--------- 1 | '8, 8A' 1 | '12,14' (2 rows) 并且代码没有终止。

由于在迭代期间插入std :: unordered_multimap,我的问题是这是否会导致不良行为。

range.second

1 个答案:

答案 0 :(得分:2)

来自std::unordered_multimap::insert

  

如果由于插入而发生重新散列,则所有迭代器都将失效。否则迭代器不会受到影响。引用不会失效。

换句话说,该插入可能使您现有的迭代器无效并导致未定义的行为。