2016-04-21 164 views
0

我对C++编程相对比较陌生,我试图创建一个只有两个值的数据集:一个ID号和一个字符串。将会有大约10万对这些。我只是不确定哪种数据结构最适合我的需求。存储和搜索大数据集

该数据集具有以下要求:

对应于字符串-the ID数是6位数字(所以000000〜999999)

-not 000000和999999之间的所有ID值将被使用

- 用户将没有权限修改数据集

-I希望通过ID或词语的要搜索的字符串,并返回给用户ID和字符串

-speed的搜索很重要

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

回答

1

对应于字符串中的ID号是6位(以便000000至999999 )

好,使用int,或更精确地int32_t为ID

- 不是所有ID值之间000000和999999将用于

没问题......

- 用户将没有权限修改数据集

类中封装你的数据,你很好去

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

好,使用Boost.Bimap

搜索的速是很重要的

我知道,这就是为什么你使用的是C++ ... :-)

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

0

使用std ::地图

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

OP想要同时搜索id和字符串。仅映射按键搜索。 – NathanOliver

-1

你有几个选项。

  1. 使用数据库,MySQL和SQLite的等等。性能取决于您使用的数据库。或者,如果你想用C++代码来做,你可以使用矢量。一个向量用于键,另一个用于字符串。您还需要映射2个向量之间的相关索引。

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

然后使用二分查找来查找关键字或值。它应该足够快。

+0

有更好的标准数据结构。 –

+0

@RobK请点名? –

+0

std :: unordered_map –

0

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

“搜索的速度是很重要的”

0

我建议像它包含您的ID /字符串对向量的一类,它映射的id到一个迭代器或引用成一个unordered_map向量和一个将字符串映射到迭代器或引用到该向量的unordered_map。然后,该类中的两个搜索函数根据id或字符串查找id /字符串对。

+0

重复字符串呢? Map键必须是唯一的。 –

+0

std :: unordered_multimap –