我在C ++编程方面比较新,我试图创建一个只有两个值的数据集:ID号和字符串。将有大约100,000对这些。我不确定哪种数据结构最适合我的需求。
该数据集具有以下要求:
- 对应于字符串的ID号是6位数(所以000000到999999)
- 不会使用000000和999999之间的所有ID值
- 用户无权修改数据集
- 我希望通过字符串中的ID或单词进行搜索,并返回用户ID和字符串
- 搜索速度很重要
所以基本上我想知道我应该使用什么(矢量,列表,数组,SQL数据库等)来构建这个数据集并快速搜索它?
答案 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)
您有几种选择。
使用数据库,MySQL,SQLite等。性能取决于您使用的数据库。
或者,如果您想在C ++代码中执行此操作,则可以使用向量。键的一个向量,另一个用于字符串。您还需要在两个向量之间映射相关索引。
添加新项目后对两个向量进行排序。请记住更新相关索引的地图
然后使用二进制搜索来查找键或值。它应该足够快。