c++ - 迭代器在插入 boost::multi_index 后变得无效?

标签 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 循环实际上执行了两次。我不知何故没有正确使用它吗?谢谢!

最佳答案

当 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 所以它们指向不同的范围。

关于c++ - 迭代器在插入 boost::multi_index 后变得无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51958605/

相关文章:

c++ - 多个查找集

c++ - 如何使用 boost::object_pool 作为 boost::multi_index 分配器?

c++ - 如何将值插入到特定索引处的 C++ boost::multiindex 集合中,如 std::list

c++ - 使用 `boost::numeric::odeint` 时扩展系统的类型签名

c++ - 为什么指针或值的递增会导致循环中的相同结果

c++ - 复制结构时出现 System.AccessViolationException

c++ - 如何在现代 C++ 中将列附加到二维 vector

c++ - 模板 : Deduction of array size failed

c++ - 如何在Boost MultiIndex中找到最常见的非唯一键?

c++ - 在 Boost 多索引容器中搜索位域数据