0

我有一个带有 key_type 和 mapped_type 的 std::map。mapped_type 的每个实例都作为 3 个副本插入到映射中 - 在 3 个不同的键值下。这使我可以根据 3 个键中的任何一个检索值。

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

是否可以将 3 个键组合成一个类并能够将此类对象与 1 个键进行比较,同时保持严格的弱排序?在这种情况下,对于 key_type,operator< 会是什么样子?

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

4

2 回答 2

2

使用 Boost.MultiIndex。请参阅http://www.boost.org/doc/libs/1_49_0/libs/multi_index/doc/tutorial/basics.html#multiple_sort

于 2012-06-20T15:39:26.207 回答
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;

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

于 2012-06-20T17:31:56.037 回答