根据文档,当将新元素插入到multi_index中时,哈希索引迭代器仍然有效。但是,当我尝试以下方法时
auto& myIndex = myMultiIndex.get<0>();
auto range = myIndex.equal_range(x);
for (auto iter = range.first; iter != range.second; ++iter) {
myMultiIndex.emplace(someArgsRelatedToIter);
}
range.first / range.second似乎变得无效:即使std :: distance(range.first,range.second)== 1,for循环实际上执行了两次。我是否以某种方式无法正确使用它?谢谢!
答案 0 :(得分:1)
当c ++库指定迭代器不会被某个操作无效时,这意味着迭代器仍指向同一元素。例如下面的代码:
std::list< int > l;
l.push_back(1);
l.push_back(2);
l.push_back(3);
auto first = l.begin();
auto last = std::find(l.begin(), l.end(), 3);
std::cout << *first << std::endl;
std::cout << *last << std::endl;
1
,3
和2
被打印。如果我们现在插入一些元素:
l.insert(last, 4);
l.insert(last, 5);
std::cout << *first << "\n";
std::cout << *last << "\n";
std::cout << std::distance(first, last) << "\n";
first
和last
仍然有效,并且指向相同的元素,但是距离现在为4
,因此它们指向不同的范围。