存储和搜索大型数据集
Storing and Searching Large Data Set
我对C++编程相对较新,我正在尝试创建一个只有两个值的数据集:ID号和字符串。将有大约 100,000 对。我只是不确定哪种数据结构最适合我的需求。
数据集具有以下要求:
-字符串对应的 ID 号是 6 位数字(因此 000000 到 999999)
- 并非所有介于 000000 和 999999 之间的 ID 值都将使用
-用户将无权修改数据集
-我希望按 ID 或字符串中的单词搜索并返回到用户 ID 和字符串
-搜索速度很重要
所以基本上我想知道我应该使用什么(向量、列表、数组、SQL 数据库等)来构建这个数据集并快速搜索它?
字符串对应的 ID 号是 6 位数字(因此 000000 到 999999)
好,使用 int
,或者更准确地说,int32_t
作为 ID
- 并非所有介于 000000 和 999999 之间的 ID 值都将使用
没问题...
-用户将无权修改数据集
将您的数据封装在一个类中,您就可以开始了
-我希望按 ID 或字符串中的单词搜索并返回到用户 ID 和字符串
很好,使用Boost.Bimap
-搜索速度很重要
我知道,这就是您使用C++的原因... :-)
您可能还需要检查SQLite:SQLite也可以用作内存数据库。
使用 std::map
void main()
{
std::map<string /*id*/, string> m;
m["000000"] = "any string you want";
}
如果你不对它们进行排序,Vector & list 是最不好用的,你不想遍历所有内容。我建议你使用地图,即使构建整个地图也可能需要更长的时间(nlogn)。我仍然推荐它,因为搜索的运行时是 log(n),这非常快!
"搜索速度很重要"
我建议像一个类,它包含一个id/字符串对的向量,一个将id映射到迭代器或引用到该向量的unordered_map,以及一个将字符串映射到迭代器或引用到该向量的unordered_map。然后,类中的两个搜索函数根据 id 或字符串查找 id/字符串对。
你有几个选择。
- 使用数据库,
MySQL,SQLite等,性能取决于您使用的数据库。
或者,如果要在C++代码中执行此操作,可以使用向量。一个向量用于键,另一个向量用于字符串。您还需要在 2 个向量之间映射相关索引。
添加新项目后对两个向量进行排序。记得更新相关索引的地图
然后使用二叉搜索查找键或值。它应该足够快。
- 如何实现高效的算法来计算大型数据集的多个不同值?
- HDF5Cpp 扩展复合数据集超板问题
- HDF5 简单读取数据集失败
- std::bad_alloc 在大数据集的 Dijkstra 计算期间
- C++中的多维数据集:从 std::vector 的 2D 数据到 std::vector 的 2D 网格的最干净方法?
- C++创建空 HDF5 文件而不是数据集的代码
- 跨线程共享数据集与拆分每个线程的数据
- 多维数据集ai中的ai_float是什么
- 适用于频繁更改的大型数据集的最佳数据结构
- 在大型数据集上执行时不返回 SQL
- 使用大型数据集初始化类成员向量的最有效方法
- 存储和搜索大型数据集
- 基于多个字段搜索大型数据集的有效方法
- 用于存储大型数据集的数据结构
- 非递归 Kosaraju 的两次传递算法实现需要很长时间才能在大型数据集上执行
- 有效地使用python对象来迭代调用python函数的大型数据集
- 大型数据集的矢量替代方案?c++
- 有效地初始化unordered_map与大型数据集的整数对
- 在c++中管理带有属性的大型空间数据集
- 大型数据集的堆栈溢出异常