在std :: multiset中,如果找到一个元素,则只有一个函数或算法可以擦除一个样本(单元或重复)

Mar*_*tin 62 c++ stl multiset

也许这是一个重复,但我没有找到任何搜索:当所有元素erase(value)被调用时,std::multiset找到的值被删除.我能想到的唯一解决方案是:

std::multiset<int>::iterator hit(mySet.find(5));
if (hit!= mySet.end()) mySet.erase(hit);
Run Code Online (Sandbox Code Playgroud)

这没关系,但我认为可能会更好.有任何想法吗 ?

use*_*346 22

auto itr = my_multiset.find(value);
if(itr!=my_multiset.end()){
    my_multiset.erase(itr);
}
Run Code Online (Sandbox Code Playgroud)

我想有一种更清洁的方法来完成同样的事情.但这可以完成工作.

  • 永远不要忽视你和其他人一起疯狂的可能性:) (9认同)
  • 这与问题中的内容没有什么不同. (3认同)
  • 我同意!没有任何意义。其他 12 人在答案中看到了一些有用的东西,所以我知道我不会发疯。 (2认同)

小智 7

试试这个:

multiset<int> s;
s.erase(s.lower_bound(value));
Run Code Online (Sandbox Code Playgroud)

只要可以确保value在设置中存在出口。这样可行。


TMu*_*r83 4

自 C++17 起(请参阅此处):

mySet.extract(val);
Run Code Online (Sandbox Code Playgroud)