|
|
1
10
有序插入不需要增强:
这确实需要复制O(n)个元素,但您说插入排序“快得惊人”,而且速度更快。如果速度不够快,您必须找到一种方法来批量添加项并在最后进行验证,或者放弃连续存储并切换到维护顺序的容器,例如
堆不维护底层容器中的顺序,但适合优先级队列或类似队列,因为它可以快速删除最大元素。你说你想保持向量的顺序,但是如果你从来没有按顺序迭代过整个集合,那么你可能不需要对它进行完全排序,这时堆是有用的。 |
|
|
2
6
根据Meyers的有效STL第23项,如果应用程序分3个阶段使用其数据结构,则应使用排序向量。从书中可以看出,它们是:
如果您对数据结构的使用类似于此,那么应该使用排序向量,然后使用前面提到的二进制搜索。如果不是,典型的关联容器应该这样做,这意味着 集合、多集合、映射或多映射 如那些结构 默认情况下是按顺序排列的 |
|
|
3
3
|
|
|
4
1
如果需要在排序序列中插入大量元素,请使用
|
|
|
5
0
树(又名heap)将被O(log(N))插入,性能更好。 看 http://www.sgi.com/tech/stl/priority_queue.html 请注意,除非树是平衡的,否则对于insert,树仍将具有最差的O(N)性能,例如AVL树。 |
|
|
6
0
为什么不使用 boost::multi_index ?
注:
|
|
|
7
0
你需要做几件事。
二进制搜索的优势
|
|
|
8
0
恐怕您的描述略过了很多细节,但似乎列表并不是该任务的合适元素。
|
|
|
9
0
您可能需要考虑使用BTree或Judy Trie。
|
|
|
10
0
正如其他人所说,我可能会从链表中创建一个BTree,而不是使用向量。即使你已经解决了排序问题,向量在需要增长时也存在完全重新分配的问题,假设你事先不知道自己的最大大小。 如果您担心在不同内存页上分配列表会导致与缓存相关的性能问题,请在阵列中预先分配节点,(将对象合并)并将它们插入列表中。
希望这有帮助,因为我看到你已经有了很多很好的答案。 |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 2 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 2 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 2 年前 |