什么是基于std :: unordered_(set | map)范围的擦除的真实用例?

时间:2014-11-15 23:12:13

标签: c++ c++11 stl

发现std::unordered_setstd::unordered_map具有基于范围的erase(first, last),在我看来,这是另一种拍摄自己的好方法。

也许有人知道这种功能的真实用例吗?

或者这可能被视为糟糕的设计?

2 个答案:

答案 0 :(得分:2)

我认为这是为了提供与常规地图和设置的兼容性。

但我仍然认为原则上它很有用。如果一系列值已停用,则您希望将其从集合中删除。但是正常的用例正在查找(比插入/删除多百万倍)并且没有遍历,所以无序版本是好的。

怎么能拍你?它与在循环中擦除每一个没有什么不同。啊,普通的开始,结束范围向前遍历将不起作用,所以你认为提供的函数没有做正确的事情,但是做同样的前向遍历可以在地图上工作但是打破一个unordered_map?

哎呀,是吗?

答案 1 :(得分:1)

好的,我have an answer。在C ++ 14中,明确指出未擦除的元素保持相同的顺序“这样可以在迭代容器时擦除单个元素。”

因此,您的迭代将以某种随机顺序进行。但是,您可以删除一次通话中访问过的所有内容。要删除的范围与您迭代的范围相同。