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

C++ - List with logarithmic read, insertion at given position

本文关键字:插入 位置 定位 列表 C++-      更新时间:2023-10-16

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

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

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

然而,请注意(正如@SergeRoatch所指出的),您为O(log N)查找(而不是O(N)查找list)支付的"价格"multiset将在元素插入时对其进行排序。这与std::list的行为不同。这也意味着您的元素需要使用std::less<>进行比较,或者您需要提供自己的比较器。

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