C ++ - 具有对数读取的列表,在给定位置插入

时间:2015-12-10 18:16:50

标签: c++ stl

我正在寻找行为类似于列表的数据结构,我们可以在任何给定位置插入一个元素,然后在任意给定位置读取一个元素,其中插入和读取应该是对数时间。在标准库中是否有这样的东西,或者我不得不自己写这个(我知道它可以实现为树)?

1 个答案:

答案 0 :(得分:1)

std::multiset的行为与您正在寻找的对数std::list非常相似

  • 迭代是双向的
  • 插入/阅读为O(log N)

但是请注意(正如@SergeRogatch所指出的那样)&#34;价格&#34;您支付O(log N)次查询(O(N)代替listmultiset会在插入元素时对其进行排序。这与std::list的行为不同。这也意味着您的元素需要使用std::less<>进行比较,或者您需要提供自己的比较器。

另一种方法是使用std::unordered_multiset(即哈希表),它具有amortized O(1)元素访问权限,但是也没有确定性顺序。但同样,您的元素需要与std::hash<>一起使用,或者您需要编写自己的哈希函数。