我在不同平台和不同编译器(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
答案 0 :(得分:2)
来自std::unordered_multimap::insert:
如果由于插入而发生重新散列,则所有迭代器都将失效。否则迭代器不会受到影响。引用不会失效。
换句话说,该插入可能使您现有的迭代器无效并导致未定义的行为。