根据文档,当新元素插入到 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 循环实际上执行了两次。我不知何故没有正确使用它吗?谢谢!
最佳答案
当 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
所以它们指向不同的范围。
关于c++ - 迭代器在插入 boost::multi_index 后变得无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51958605/