从unordered_multiset中仅移除一个元素

3
我希望从`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;

我希望这段代码会先打印3再打印2,但实际上会先打印3再打印0。那么如何只移除一个item呢?

你肯定是想说“先输出3,然后输出2”吧? - Bartek Banachewicz
1
你试过了吗???这与删除擦除习语无关!!@Ron - Eduard Rostomyan
抱歉,我的错 @BartekBanachewicz。已编辑。 - Eduard Rostomyan
哪一个项目是那个?它们都具有相同的值。在无序多重集合中,没有第一个或最后一个元素。 - Ron
1个回答

11

你可以使用另一个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);

现场版本


为什么要使用range()函数而不使用只接受一个迭代器的版本呢? - Slava
@Slava Range版本非常有用,如果您想要删除多个版本的话。 - Bartek Banachewicz
4
您的第一版和第二版需要检查,因为将 end() 传递给 erase()next() 是不合法的。 - Slava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接