在多个键下的地图中存储项目

时间:2012-06-20 15:22:32

标签: c++ data-structures

我有一个带有key_type和mapped_type的std :: map。 mapped_type的每个实例都作为3个副本插入到地图中 - 在3个不同的键值下。这允许我基于3个键中的任何一个来检索值。

但缺点是,当我想要删除项目时,我需要查找3个键而不是一个,以便删除所有3个副本。

是否可以将3个键组合成一个类,并且能够将这个对象与1个键进行比较,同时保持严格的弱排序?在这种情况下,运营商将如何<看起来像是key_type?

编辑:3个键的类型相同,例如可以使用3个不同的整数值访问单个记录(并且任何其他记录不使用这些键值)。所以根据我的理解,Boost.MultiIndex不是解决这个问题的方法。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

我建议使用封装在单个对象中的两个数据结构:

  • std::list<Node> list;
  • std::map<Key, std::list<Node>::iterator> map;

Node包含:

  • Value value;
  • 和3个实例std::map<Key, std::list<Node>::iterator>::iterator i1, i2, i3;

然后,您可以使用适当的簿记插入和删除值,以确保结构保持一致。