为什么最差情况下std::unordered_multiset
插入件的复杂度是线性的?我知道为什么会这样std::unordered_set
(您必须检查插入的值不在集合中),但是对于多集我却不明白。我是否缺少明显的东西?
在C ++标准表91的第23.2.7节中,无序关联容器[unord.req]描述了STL无序关联容器必须满足的其他要求。在该表中的标准决定了STL无序容器(即,,,和)必须提供作为成员类型和。unordered_set
unordered_map
unordered_multiset
unordered_multimap
local_iterator
const_local_iterator
local_iterator
是一个迭代器类型,其类别,值,差,指针和引用类型与无序容器的相同iterator
。该迭代器可用于遍历单个存储桶,但不能跨存储桶进行迭代。const_local_iterator
是一个迭代器类型,其类别,值,差,指针和引用类型与无序容器的相同const_iterator
。该迭代器可用于遍历单个存储桶,但不能跨存储桶进行迭代。这些迭代器有什么用?
c++ unordered-map unordered-set unordered-multiset unordered-multimap
我想知道为什么会用std::unordered_multiset
。我的猜测是它与插入/擦除后迭代器的无效或非无效有关,但也许更深层吗?非常相似的问题在这里:std :: multimap的用例,但更多是关于地图的讨论。
我想删除一个特定元素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.所以如何只删除一个项目?
我最近发现multiset<T>
STL中的实现实际上在树中保留了相同重复元素的不同副本。我之前的期望是它在内部使用 amap<T, int>
并只保留重复元素的数量。
与仅保持计数相比,此实现在哪些情况下有益?multiset
如果内部实现发生变化,是否有任何用例会导致代码中断?或者是否有任何操作如果更改会增加复杂性?
我想知道这个选择背后的思考过程是什么?