2013-01-10 49 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中 –