c++ - 可以分段的基于散列的数据容器 - C++

标签 c++ data-structures hash record

我想根据它们的散列索引一系列奇异值或结构/类(意味着一次散列多个值)。

我已经编写了哈希函数,所以为任何值或结构或类提供摘要没有问题,问题是:

  • C++ 是否真正支持基于散列的数据结构?我的意思是,如果有更好的替代方法来替代 std::map 的简单使用,以及一个为此设计的容器 超过 2 个字段(我仍然没有'决定我的数据结构中真正需要多少个字段)。
  • 因为我计划轻松达到 10^5 条记录,管理一个碎片化的数据结构,所以避免直接处理内存中的巨大数据结构并分配结构的无用部分对我来说很重要。
  • 如果我想将这个结构保存在磁盘上,序列化是唯一的选择吗?

假设我的散列函数是 hash::digest() 我将感谢对实际代码的最少引用以及有关使用适当数据结构的示例。

谢谢。

编辑:

我想避免无序的数据结构,因为:

  • 错误的分支预测
  • 因为它们没有顺序,所以不能以有效的方式进行分割
  • 我的主要工作重点是管理这种结构及其碎片化。

最佳答案

我打算把这个写成一个答案,因为我不认为评论真的能让我们到任何地方:

首先,我认为您要么找错了方向,要么您需要坐下来为我们画一张小图,以便我们理解您的要求。

一般来说,我和许多其他人遵循“在工作时使用 std::vector(索引是合理的类型/范围)”的原则,直到证明它不够好。如果索引不适用于 vector ,使用 std::map,除非证明这不是合适的解决方案”。但更重要的是,无论您使用什么存储,都应该从主代码中隐藏起来。你应该有访问器函数来获取数据,如果你使用 vector 、映射、特里、B 树、堆、堆栈、队列等,这无关紧要。只要你的程序需要的功能可以由你的界面,应该可以将数据存储在任何类型的容器类中。有了这个原则,您就可以在需要的时候/根据需要更改实际的存储容器,而不必担心使用该容器的代码是否会中断。

至于存储数据结构,任何不只是 POD 的东西都需要序列化,无论您使用何种形式的容器。所以如果你存储任何类,例如std::string,那么你必须序列化数据,因为内部结构不能只存储在文件中。

关于c++ - 可以分段的基于散列的数据容器 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14026794/

相关文章:

c++ - Visual Studio C++ 如何将从 .rc 或 .h 读取的版本信息添加到目标名称?

c++ - 在预编译的头文件中放什么? (MSVC)

关闭控制台时 C++/Qt 运行函数

algorithm - 我如何证明 n^3.5 不是 O(n^3)

C++ 在一个集合中存储多种数据类型

java - 什么数据结构最适合在 Java 中实现二维数组?

java - Java内部是否使用Hashing技术来管理所有对象

用于信号处理的 C++ 库

python - 在 python 中的空列表上使用索引

ruby - 如何将两个散列合并为一个数组散列?