C ++中用于插入和删除的最佳数据结构/容器

时间:2012-07-04 09:48:18

标签: c++ data-structures

我正在寻找C ++的最佳数据结构,其中插入和删除可以非常有效和快速地进行。

对于这种数据结构,遍历也应该非常容易。我应该选择哪一个? 怎么样在C ++中的SET ??

4 个答案:

答案 0 :(得分:5)

链接list可以有效插入和删除任意元素。这里删除的是迭代器删除,而不是值。遍历非常快。

dequeue仅在末尾提供有效的插入和删除,但这些比链接列表更快,并且遍历也更快。

如果您想要按价值找到元素,则set才有意义,例如删除它们。否则,检查重复的开销以及保持排序的开销将被浪费。

答案 1 :(得分:1)

这取决于您希望将哪些内容放入此数据结构中。如果商品无序或您关心订单,请列出<>可用于。如果您想按排序顺序排列它们,请设置<>或multiset<> (后者允许多个相同的元素)可以替代。

列表<>通常是双链表,因此只要您知道位置,就可以在恒定时间内完成插入和删除。遍历所有元素也很快,但访问指定元素(按值或按位置)可能会变慢。

设置<>它的族通常是二叉树,因此插入,删除和搜索元素大部分都是对数时间(当你知道插入/删除的位置时,它是恒定的时间)。遍历所有元素也很快。

(注意:boost和C ++ 11都有基于哈希表的数据结构,也可以是一个选项)

答案 2 :(得分:1)

我会说一个链表,取决于你的删除是否具体而且经常。关于它的迭代器。

答案 3 :(得分:0)

我觉得你需要一个tree

我不确定确切的结构(因为你没有提供详细信息),但如果你可以将数据放入binary tree,你可以在搜索,删除和插入元素时获得不错的速度( O(logn)平均值和 O(n)最坏情况。)

请注意,我在这里谈论数据结构,你可以用不同的方式实现它。