Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用于快速搜索的二进制数据结构_C++_Linked List_Hashtable_Binary Tree - Fatal编程技术网

C++ 用于快速搜索的二进制数据结构

C++ 用于快速搜索的二进制数据结构,c++,linked-list,hashtable,binary-tree,C++,Linked List,Hashtable,Binary Tree,我正在寻找一个二进制数据结构(树,列表),使非常快速的搜索。我将一次只在程序的开始/结束添加/删除项目。所以它的大小是固定的,所以我并不关心插入/删除的速度。基本上,我正在寻找的是一个结构,提供快速搜索,并没有使用太多的内存 谢谢一个有效的(尽管有点混乱)算法是 内部,C++标准库使用红黑树来实现 STD::MAP< /C> >参见 < P> >代码> STD::MAP< /COD>和哈希映射是很好的选择。他们也有施工人员来简化一次性施工 哈希映射将键数据放入一个返回数组索引的函数中。这可能比s

我正在寻找一个二进制数据结构(树,列表),使非常快速的搜索。我将一次只在程序的开始/结束添加/删除项目。所以它的大小是固定的,所以我并不关心插入/删除的速度。基本上,我正在寻找的是一个结构,提供快速搜索,并没有使用太多的内存

谢谢

一个有效的(尽管有点混乱)算法是


内部,C++标准库使用红黑树来实现<代码> STD::MAP< /C> >参见

< P> >代码> STD::MAP< /COD>和哈希映射是很好的选择。他们也有施工人员来简化一次性施工

哈希映射将键数据放入一个返回数组索引的函数中。这可能比
std::map
慢,但只有分析才能说明问题


我的偏好是 STD::MAP>代码>,因为它通常被实现为一种二叉树。

< p>查找Boost C++库中的无序集。与红黑树不同,红黑树是O(logn)用于搜索,无序集基于散列,平均为O(1)搜索性能。

一个不容忽视的容器是排序的std::vector


它肯定会在内存消耗上占上风,特别是如果您可以提前保留()正确的数量。

因此,键可以是一个简单的类型,值是一个由五个指针组成的小结构

由于只有50个元素,它开始变得足够小,以至于大O理论性能可能被算法或结构的固定时间开销所掩盖或至少可测量

例如,具有线性搜索的向量数组通常是最快的,因为它的结构简单,内存紧张,只有不到十个元素

我将包装容器并在其上运行实时数据。从STL的矢量开始,转到标准STL映射,升级到无序的\u映射,甚至可以尝试谷歌的密集或稀疏\u散列\u映射:

最快的往往是树/树。我实现了一个比std::unordered_映射快3到15倍的映射,它们往往使用更多的ram,除非您使用大量元素。

数据的性质是什么?能分类吗?它的大小是多少,内存限制是什么?Haspemulator,它大约有五个指针,我想它可以被排序,因为每段数据都有一个唯一的指针。它将有许多节点,平均大约50个。@myrkos,所以您需要搜索50个整数,或者搜索50个包含5个指针的结构实例?+1。使用
下限
在排序向量中查找元素基本上模拟了
集合
的搜索行为,但是
向量
的内存效率要高得多,因此由于内存位置的原因,查找可能也会快得多。只要确保进行二进制搜索以查找数据,如果您不必在运行时更改数据,这是一个很好的答案,对于一个小的(50ish)集合。