我有一个带有key_type和mapped_type的std :: map。 mapped_type的每个实例都作为3个副本插入到地图中 - 在3个不同的键值下。这允许我基于3个键中的任何一个来检索值。
但缺点是,当我想要删除项目时,我需要查找3个键而不是一个,以便删除所有3个副本。
是否可以将3个键组合成一个类,并且能够将这个对象与1个键进行比较,同时保持严格的弱排序?在这种情况下,运营商将如何<看起来像是key_type?
编辑:3个键的类型相同,例如可以使用3个不同的整数值访问单个记录(并且任何其他记录不使用这些键值)。所以根据我的理解,Boost.MultiIndex不是解决这个问题的方法。
答案 0 :(得分:2)
使用Boost.MultiIndex。见http://www.boost.org/doc/libs/1_49_0/libs/multi_index/doc/tutorial/basics.html#multiple_sort
答案 1 :(得分:1)
我建议使用封装在单个对象中的两个数据结构:
std::list<Node> list;
std::map<Key, std::list<Node>::iterator> map;
Node
包含:
Value value;
std::map<Key, std::list<Node>::iterator>::iterator i1, i2, i3;
然后,您可以使用适当的簿记插入和删除值,以确保结构保持一致。