具有多个比较功能的单个std :: map / multimap?

时间:2012-10-05 23:28:49

标签: c++ maps

这可能吗?它甚至有意义吗?例如,如果我有一个地图的比较函数,我需要(pos 1)作为键(按顺序):

交流 AB AA 公元前 BA CB

然后我可能想得到订单:

AA AB AC BA 公元前 CB

我知道我可以降低/升高并从那里进行比较。另外,如果我有后者的比较功能怎么样。先前是否可以通过不同的比较函数和相同的地图来完成?

1 个答案:

答案 0 :(得分:1)

::std::map是一种复杂的数据结构,它以特定的顺序保存元素。重新排序此数据结构意味着完全破坏它并从头开始重新创建它。所以不,这不能完全按照你指定的方式完成。

但它可以完成。它需要多个映射,并且有效地为非平凡数据做空间要求您存储指向数据的指针而不是数据本身。在这种情况下如何处理密钥取决于密钥的确切位置。在某些情况下,您可能还想存储指向键的指针,或者可能只是再次使用数据指针,并让比较函数从数据中提取密钥。