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

Best data structure/ container in C++ for insertion and deletion

本文关键字:最佳 数据结构 容器 删除 用于 插入 C++      更新时间:2023-10-16

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

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

链表提供任意元素的有效插入和删除。此处的删除是通过迭代器删除,而不是按值删除。遍历非常快。

取消排队仅在末端提供有效的插入和删除,但这些比链表更快,并且遍历也更快。

只有当您想按元素的值查找元素时,集合才有意义,例如删除它们。否则,检查重复项以及保持事物排序的开销将被浪费。

这取决于您要放入此数据结构的内容。如果项目是无序的,或者您关心它们的顺序,则可以使用list<>。如果您希望它们按排序顺序排列,set<> 或 multiset<>(后者允许多个相同的元素)可能是一种替代方法。

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

set<> 及其族通常是二叉树,因此插入、删除和搜索元素大多以对数时间为对数时间(当您知道在哪里插入/删除时,它是常量时间)。遍历所有元素也很快。

(注意:boost 和 C++11 都有基于哈希表的数据结构,这也是一种选择)

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

我突然想到,你需要一棵树。

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

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