存储和搜索大型数据集

时间:2016-04-21 20:00:35

标签: c++

我在C ++编程方面比较新,我试图创建一个只有两个值的数据集:ID号和字符串。将有大约100,000对这些。我不确定哪种数据结构最适合我的需求。

该数据集具有以下要求:

- 对应于字符串的ID号是6位数(所以000000到999999)

- 不会使用000000和999999之间的所有ID值

- 用户无权修改数据集

- 我希望通过字符串中的ID或单词进行搜索,并返回用户ID和字符串

- 搜索速度很重要

所以基本上我想知道我应该使用什么(矢量,列表,数组,SQL数据库等)来构建这个数据集并快速搜索它?

5 个答案:

答案 0 :(得分:1)

  

对应于字符串的ID号是6位数(所以000000到   999999)

好,请使用int,或更准确地使用int32_t作为ID

  

- 不会使用000000和999999之间的所有ID值

没问题......

  

- 用户无权修改数据集

将数据封装在一个类中,你很高兴

  

- 我希望通过字符串中的ID或单词进行搜索,并返回用户ID和字符串

好,请使用Boost.Bimap

  

- 搜索速度很重要

我知道,这就是你使用C ++的原因......: - )

您可能还想检查SQLite:SQLite,也可以作为内存数据库。

答案 1 :(得分:0)

使用std :: map

void main()
{
   std::map<string /*id*/, string> m;
   m["000000"] = "any string you want";
}

答案 2 :(得分:0)

Vector&amp;列表是最糟糕的,如果你不对它们进行排序,你不想循环通过所有。 我建议您使用地图,即使构建整个地图可能需要更长时间(nlogn)。我仍然推荐它,因为搜索的运行时是log(n),这非常快!

  

&#34;搜索速度很重要&#34;

答案 3 :(得分:0)

我建议类似于包含id / string对向量的类,将id映射到迭代器或引用到该向量的unordered_map,以及将字符串映射到迭代器或引用到其中的unordered_map向量。然后,类中的两个搜索函数根据id或字符串查找id / string对。

答案 4 :(得分:-1)

您有几种选择。

  1. 使用数据库,MySQL,SQLite等。性能取决于您使用的数据库。

  2. 或者,如果您想在C ++代码中执行此操作,则可以使用向量。键的一个向量,另一个用于字符串。您还需要在两个向量之间映射相关索引。

  3. 添加新项目后对两个向量进行排序。请记住更新相关索引的地图

    然后使用二进制搜索来查找键或值。它应该足够快。