|
|
1
365
无序集必须通过以下几种方式为其O(1)平均访问时间付费:
|
|
|
2
248
当某人想要迭代集合中的项目时,顺序很重要。 |
|
3
34
例如,哈希表在最坏的情况下是“O(n)”。O(1)是平均情况。树是“O”( 日志 |
|
|
4
22
在以下情况下使用set:
设置: 输入:1,8,2,5,3,9 输出:1,2,3,5,8,9 无序集: 输入:1,8,2,5,3,9
主要区别是:
注:(在某些情况下)
原因是什么
你可以在某些情况下看到这一点
主要引自: https://www.geeksforgeeks.org/set-vs-unordered_set-c-stl/ https://stackoverflow.com/a/29855973/6329006 |
|
5
8
我对这个主流的Linux C++实现进行了基准测试,以看出不同之处:
完整的基准详情和分析见: What is the underlying data structure of a STL set in C++?
“BST”是指“使用
简要总结如下:
|
|
|
6
7
因为STD::SET是标准C++的一部分,而无序的集合不是。C++0x |
|
|
7
7
考虑扫描算法。这些算法在使用哈希表时会完全失败,但在使用平衡树时效果很好。给你一个具体的例子,一个扫尾算法考虑财富的算法。 http://en.wikipedia.org/wiki/Fortune%27s_algorithm |
|
|
8
5
除了其他人已经提到的以外,还有一件事。虽然将元素插入无序_集的预期摊销复杂度为O(1),但有时它会 以O(n)为例,因为哈希表需要重新构造(bucket的数量需要改变)——即使使用“良好”的哈希函数也是如此。就像在向量中插入一个元素一样,有时需要O(n),因为底层数组需要重新分配。 插入一个集合最多需要O(logn)。在某些应用中,这可能更可取。 |
|
|
9
5
|
|
|
10
4
对不起,关于排序属性,还有一件事值得注意: 如果你愿意 一系列数据 在容器中,例如:您将时间存储在 对于 这是不可能的。 当然,这个例子对于两个用户之间的用例更具说服力 地图 无序地图 . |
|
|
11
2
|
|
|
12
2
如果您想对事物进行排序,那么可以使用set而不是unordered_set。当存储的顺序无关紧要时,无序_集合用于集合之上。 |
|
|
13
1
如果(错误地)编写了依赖于存储顺序的代码,结果将是程序在不同机器之间的行为不一致。实际上,如果无序集是返回值列表的函数/方法实现的一部分,则可能发生这种情况。该函数的客户端可能没有意识到正在使用无序集,并且可能没有意识到返回列表的顺序不能保证一致/可移植。 因此,无序集对程序员来说比有序集更不可原谅。他们引入了这种额外的机制来混淆代码行为,这可能会导致耗时/混淆错误,因为它们可能无法在机器之间重现。 |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 1 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 1 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 1 年前 |