2017-07-06 20 views
0

我是C++的新手,需要存儲數據集。該數據集看起來像下面如何使用C++中的不同鍵引用數據

id | time | value 
01 | 1 | 1 
01 | 2 | 0 
01 | 3 | 1 
01 | 4 | 0 
01 | 5 | 1 
02 | 1 | 2 
02 | 2 | 3 
02 | 3 | 7 
02 | 4 | 9 
02 | 5 | 5 

我想能夠或者通過idtime搜索數據,即

GetValueByID(data, '01') 
# id | time | value 
# 01 | 1 | 1 
# 01 | 2 | 0 
# 01 | 3 | 1 
# 01 | 4 | 0 
# 01 | 5 | 1 

GetValueByID(data, '2') 
# id | time | value 
# 01 | 2 | 0 
# 02 | 2 | 3 

什麼是這樣做的內存使用效率最高的方式? 謝謝!

+0

你應該允許重複的ID,如果是的話,處理查找時應該返回哪個值的規則是什麼,如果它是一個集合? – George

+0

boost :: multiindex就是爲此而設計的。 https://theboostcpplibraries.com/boost.multiindex http://david-grs.github.io/why_boost_multi_index_container-part1/ http://www.boost.org/doc/libs/1_64_0/libs/multi_index/doc/index .html –

回答

0

內存高效的方法是創建一個帶有ID,Time和Value成員的類,然後使用該類的一個std::vector

對於運行時的效率,要創建一個包含搜索關鍵領域和項目的矢量指數的索引表std::map。爲ID創建一個地圖,爲Time字段創建另一個地圖。這是數據庫表的常用方法。

編輯1:重複鍵
您使用std::map如果關鍵領域是獨一無二的。當密鑰不唯一時使用無序映射。

+1

你是不是指非獨特的多圖? – pm100

+0

只需注意:只有當數組達到一定的大小時,std :: map纔會變得更有效率。對於小數據集std :: vector可能最終會比std :: map更高效。 –

相關問題