也许这是重复的,但我没有找到任何搜索内容:当在所有具有找到值的元素上erase(value)
调用时被删除。std::multiset
我能想到的唯一解决方案是:
std::multiset<int>::iterator hit(mySet.find(5));
if (hit!= mySet.end()) mySet.erase(hit);
这没关系,但我认为可能会有更好的。有任何想法吗 ?
auto itr = my_multiset.find(value);
if(itr!=my_multiset.end()){
my_multiset.erase(itr);
}
我想有一种更清洁的方式来完成同样的事情。但这可以完成工作。
试试这个:
multiset<int> s;
s.erase(s.lower_bound(value));
只要能保证value
存在于集合中。这样可行。
if(my_multiset.find(key)!=my_multiset.end())
my_multiset.erase(my_multiset.equal_range(key).first);
这是我能想到的在 C++ 中删除多重集中的单个实例的最佳方法
我会尝试以下。
首先调用equal_range()
查找等于键的元素范围。
如果返回的范围是非空的,那么erase()
元素的范围(即,erase()
它需要两个迭代器),其中:
第一个参数是返回范围中第二个元素的迭代器(即过去.first
返回的元素)和
第二个参数作为返回的范围对迭代器的.second
一个。
阅读templatetypedef的(谢谢!)评论后编辑:
如果应该删除一个(而不是全部)重复项:如果返回的对equal_range()
至少有两个元素,则erase()
通过将返回对的 .first 传递给 的单个迭代器版本的第一个元素erase()
:
伪代码:
pair<iterator, iterator> pit = mymultiset.equal_range( key );
if( distance( pit.first, pit.second ) >= 2 ) {
mymultiset.erase( pit.first );
}
这对我有用:
multi_set.erase(multi_set.find(val));
如果 val 存在于多重集中。
我们可以这样做:
multiset<int>::iterator it, it1;
it = myset.find(value);
it1 = it;
it1++;
myset.erase (it, it1);
auto itr=ms.find(value);
while(*itr==value){
ms.erase(value);
itr=ms.find(value);
}
试试这个 它将删除多集中所有可用的重复项。
其实正确答案是:
my_multiset.erase(my_multiset.find(value));