2013-01-10 85 views
3

如何設計查表的數據結構?用「多重組合」鍵表示查找表的數據結構

我基本上有如下表代表

Country    Activity  Legal_Age 
European   Drink   18 
European   Drive   21 
American   Drink   21 
American   Drive   18 

這裏我主要是(國家&活動)和值是Legal_age。

我想使用std :: map將這個問題分解成(如個別映射)如下。

national_Activity_age_map

European   European_Activity_age_map 
American   American_Activity_age_map 

European_Activity_age_map

Drink   18 
Drive   21 

American_Activity_age_map

Drink   21 
Drive   18 

但現在的問題是,作爲列的原始表的數量不斷增加,地圖的數量被添加和保持不斷增長。

比方說,美國選擇爲美國公民和非公民單獨飲酒。然後我將不得不添加新的映射,並修改現有的映射。

是否有一個簡單的&一個乾淨的方式來表示一個DataStructure中的這個數據,它接受一個多因子密鑰併產生一個值?

有幾個類似的問題,如下所示,但沒有回答我的具體問題。 What datastructure would you use to represent this format of data?

更新: 我不能在工作中使用Boost功能,因爲它必須移植(或類似的東西)。有沒有我可以使用的C++(gcc 4.1.2)功能。

+0

有助於說出您想查詢哪些列。另外任何關於數據庫模式設計的書都將涉及這個主題。 –

+0

Brian:我在上面提到我的鑰匙是(Country&Activity),價值是Legal_age。 –

+0

地圖<對<國家,活動>,年齡> –

回答

8

嘗試Boost Multi-Index

Boost多索引容器庫提供了一個名爲multi_index_container的類模板,它使得容器的構建能夠維護具有不同排序和訪問語義的一個或多個索引。索引提供的接口類似於STL容器的接口,使用它們很熟悉。在相同元素集合上進行多索引的概念是從關係數據庫術語中借鑑的,並且允許根據乘法索引關係表的精神指定複雜的數據結構,其中簡單集合和映射不夠。

+0

謝謝。但不能在工作中使用Boost功能,因爲它必須移植(或類似的東西)。有沒有我可以使用的C++(gcc 4.1.2)功能。 –

+0

「Boost.MultiIndex是僅包含頭文件的庫,不需要額外的目標模塊。」所以你可以只下載你需要的'.hpp'文件,並將它們複製到你的項目中。 HTTP://www.boost。組織/ DOC /庫/ 1_52_0 /庫/ multi_index/DOC /參考/ index.html中 –