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?
我需要一个可以在 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(
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 为什么我可以通过引用修改常量返回
- 我可以在 C++ 中的函数体之外进行操作吗?
- 我可以重新分配/覆盖std::字符串吗
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 为什么我可以使用比分配的内存更多的内存
- 在一个读写器队列中,我可以用volatile替换原子吗
- 我可以把基础班提升为儿童班吗
- 我可以做些什么来消除或最小化这种将提供相同功能和行为的代码重复
- 我可以使用什么来停止循环而不是"返回 0"?
- 我可以使用反向迭代器作为ForwardIt吗
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 无论如何,我可以确定构造函数是否存在吗?