stl 中是否有任何数据结构可以在 O(1) 或 O(log n) 中插入元素,我可以在其上编写自己的bin_searc

Is there any data structure in stl that can insert element in O(1) or O(log n) and I can write my own bin_search on it?

本文关键字:我可以 searc bin 自己的 元素 数据结构 任何 是否 log stl 插入      更新时间:2023-10-16

我需要一个可以在 O(1( 或 O(log n( 中插入元素的数据结构,我可以在这个数据结构对象上编写自己的二叉搜索函数?如果 stl 中没有这样的数据结构,我怎么能编写自己的数据结构?

STL 中有一个容器,它具有 O(1)O(logn)插入,并且能够进行二叉搜索(这需要随机访问(。它的名字是std::deque,虽然它没有任何固有的顺序,所以你必须自己提供元素顺序。

// Fill a deque with elements
std::deque<int> deq{4, 2, 3, 1, 2, 3};
// Sort it to satisfy binary search precondition
std::sort(deq.begin(), deq.end());
// Do your binary search here

听起来你正在尝试学习一些计算机科学基础知识。 我建议使用 std::vector 作为底层数据结构,这样您就可以专注于更高级别的核心服务逻辑,而不是低级别的底层内存处理。 基于向量,您可以实现用于 O(log n ( 插入的堆。 向量具有随机访问迭代器,这对于访问集合的"中间"元素很有用,用于分而治之算法,例如二分搜索。

是的,您可以使用堆数据结构,在最坏的情况下需要 O(Log n(,但在平均情况下需要 o(1(