我正在寻找行为类似于列表的数据结构,我们可以在任何给定位置插入一个元素,然后在任意给定位置读取一个元素,其中插入和读取应该是对数时间。在标准库中是否有这样的东西,或者我不得不自己写这个(我知道它可以实现为树)?
答案 0 :(得分:1)
std::multiset
的行为与您正在寻找的对数std::list
非常相似
O(log N)
但是请注意(正如@SergeRogatch所指出的那样)"价格"您支付O(log N)
次查询(O(N)
代替list
)multiset
会在插入元素时对其进行排序。这与std::list
的行为不同。这也意味着您的元素需要使用std::less<>
进行比较,或者您需要提供自己的比较器。
另一种方法是使用std::unordered_multiset
(即哈希表),它具有amortized O(1)
元素访问权限,但是也没有确定性顺序。但同样,您的元素需要与std::hash<>
一起使用,或者您需要编写自己的哈希函数。