C++11 在使用相同的键对元素进行迭代时,插入无序的_多重映射是否安全?

C++11 在使用相同的键对元素进行迭代时,插入无序的_多重映射是否安全?,c++11,g++,clang,C++11,G++,Clang,我在不同的平台和不同的编译器(clang和g++)上体验到这段代码的不同行为。对于Linux上的g++来说,这段代码似乎没有问题。内部循环在两次迭代后保留。但在Mac OS上,内部循环似乎找不到范围。第二个,代码不会终止 由于在迭代过程中插入了std::unordered_multimap,我的问题是这是否会导致不希望的行为 typedef pair< vector<int>, vector<int> > VPair; typedef pair< vec

我在不同的平台和不同的编译器(clang和g++)上体验到这段代码的不同行为。对于Linux上的g++来说,这段代码似乎没有问题。内部循环在两次迭代后保留。但在Mac OS上,内部循环似乎找不到
范围。第二个
,代码不会终止

由于在迭代过程中插入了std::unordered_multimap,我的问题是这是否会导致不希望的行为

typedef pair< vector<int>, vector<int> > VPair;
typedef pair< vector<int>, VPair > V_VPair;
typedef unordered_multimap < vector<int>, VPair, VHash > V2VPairMap;

V2VPairMap v2vPairs;
//... fill v2vPairs
for(vector<int> myVector : vectorOfIntVectors) {
    //search this int vector in unordered map
    auto range = v2vPairs.equal_range(myVector);
    for (auto it = range.first; it != range.second; ++it)
    {
        pair< vector<int>, vector<int> > aPair = it->second;
        //...
        V_VPair newPair1(newVector1, aPair);
        V_VPair newPair2(newVector2, aPair);
        v2vPairs.insert(newPair1); // <----- safe?
        v2vPairs.insert(newPair2); // <----- safe?
    }
    v2vPairs.erase(myVector); // <-- should be safe
}
typedef对VPair;
typedef对vvpair;
typedef无序_multimapV2VPairMap;
V2VPairMap v2vPairs;
//... 填充V2V空气
对于(向量myVector:VectorOfInvectors){
//在无序映射中搜索此整数向量
自动范围=v2vPairs.相等范围(myVector);
for(自动it=range.first;it!=range.second;++it)
{
pairaPair=it->second;
//...
V_VPair newPair1(新矢量1,亚太地区);
V_VPair newPair2(新矢量2,亚太地区);
v2vPairs.插入(新对1);//来自:

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


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

我可能不应该在循环后插入。这是不是有一个原因导致这种情况发生在clang而不是g++?或者这纯粹是巧合?@Sadik哈希表的不同实现,因此它们可能会在不同的时间重新刷新。