2016-04-21 172 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 –