插入boost :: multi_index之后,迭代器变得无效。

时间:2018-08-22 01:07:59

标签: c++ boost-multi-index

根据文档,当将新元素插入到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循环实际上执行了两次。我是否以某种方式无法正确使用它?谢谢!

1 个答案:

答案 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;

132被打印。如果我们现在插入一些元素:

l.insert(last, 4);
l.insert(last, 5);
std::cout << *first << "\n";
std::cout << *last << "\n";
std::cout << std::distance(first, last) << "\n";

firstlast仍然有效,并且指向相同的元素,但是距离现在为4,因此它们指向不同的范围。