【发布时间】:2018-05-26 00:34:36
【问题描述】:
我在不同平台和不同编译器(clang 和 g++)上使用此代码时遇到了不同的行为。对于 Linux 上的 g++,这段代码似乎没有问题。内部循环在两次迭代后留下。但是在 Mac OS 上使用 clang 时,内部循环似乎找不到 range.second 并且代码不会终止。
由于在迭代期间插入了 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
}
【问题讨论】: