仅从unordered_multiset中删除一个项目

Edu*_*yan 1 c++ stl set erase unordered-multiset

我想删除一个特定元素std::unordered_multiset,但是当我尝试使用erase函数时,它会消除所有项目,无论它们有多少.
例如:

std::unordered_multiset<int> M;
M.insert(1);
M.insert(1);
M.insert(1);
std::cout<<M.count(1)<<std::endl;

M.erase(1);
std::cout << M.count(1) << std::endl;
Run Code Online (Sandbox Code Playgroud)

我希望这打印3然后2.但它打印3然后0.所以如何只删除一个项目?

Bar*_*icz 7

您可以使用另一个erase重载:

std::unordered_multiset<int> s { 1, 2, 2, 3, 3, 3 };

const auto it = s.find(2);

if (it != s.end())
    s.erase(it);
Run Code Online (Sandbox Code Playgroud)

实时版

  • 你的第一个和第二个版本需要检查,因为将`end()`传递给`erase()`和`next()是非法的. (3认同)