【发布时间】:2018-08-15 01:06:22
【问题描述】:
我正在尝试做这样的事情:
auto& myIndex = myMultiIndex.get<0>();
auto range = myIndex.equal_range(x);
for (auto iter = range.first; iter != range.second; ++iter) {
if (somePredicate) myIndex.erase(iter);
}
当然这不起作用,因为一旦我们从容器中删除一个元素,迭代器就会变得无效。 std::remove_if 也不起作用,因为它会修改和覆盖容器中的元素,这会弄乱其他索引。做这种事情的推荐方法是什么?
谢谢!
【问题讨论】:
-
为什么不使用
iterator erase(iterator first,iterator last)重载? -
@n.m.因为我不想删除范围内的所有内容,只删除由 somePredicate 过滤的内容。
标签: c++ boost-multi-index