【发布时间】:2017-11-06 14:48:02
【问题描述】:
在迭代 multimap 时,我想删除元素,但不仅仅是迭代器指向的元素。
for (vector<int> myVec : myVectors)
{
auto range = myMultiMap.equal_range(myVector);
for (auto it = range.first; it != range.second; ++it)
{
// secondPair is another element of this multimap
auto secondPair = getSecondPair(it, myMultiMap);
if (condition)
{
it = myMultiMap.erase(it);
auto finder = myMultiMap.find(secondPair);
// how can I delete secondPair?
}
}
}
也许这是这里的 xy 问题,所以让我解释一下我需要这个:我正在尝试做的是缩短一组 vector<int>。每个元素都有MyPair 类型的关联元素。这些关联的元素存储在一个无序的多图中。
typedef unordered_multimap < vector<int>, MyPair, SomeHash > MyMultiMap;
如果多重映射中的所有关联对都已成功处理,则可以删除set<vector <int> > 的元素。对于他们中的大多数人来说,这不会成功,所以他们中的大多数人预计会留在系列中。我的想法是从多图中删除元素,如果多图中不再有关联的元素,则意味着可以从集合中删除该元素。
在这里,我又遇到了在迭代时从集合中删除元素的问题。同样,不仅仅是迭代器指向的那个。
【问题讨论】:
-
您需要就地执行此操作,还是可以复制到一个临时集并将
swap复制到myVectors? -
仅供参考,同时说
it = myMultiMap.erase(it)和++it可能会导致一些错误。 -
@Caleth 我可以。如果这是一个好的解决方案。