改变std :: map的排序模式

时间:2012-06-20 21:18:53

标签: c++ stl stdmap

我正在创建std::map<a,b>,其中订购条件定义为a::operator<

在某些时候是否有任何方法可以更改地图的类型,以便从现在开始按a上的另一个排序算法排序?它还需要重新排序地图的当前内容

感谢

2 个答案:

答案 0 :(得分:7)

您必须创建另一个地图,并将第一个地图的元素复制到第二个地图中,如下所示:

std::map<a,b> map1;
... // operations on map1
std::map<a,b,Sorter> map2(map1.begin(), map1.end());

答案 1 :(得分:1)

答案在于std::map

的声明
template < class Key, class T, class Compare = less<Key>,
           class Allocator = allocator<pair<const Key,T> > > class map;

Compare模板参数可用于定义地图排序的比较:

  

比较:比较类:一个带有两个键参数的类   输入并返回一个bool。表达式comp(a,b),其中comp是   这个比较类的对象和a和b是关键值,应该   如果要将a放置在比b中的b更早的位置,则返回true   严格的弱订货操作。这可以是一个班级   实现函数调用操作符或指向函数的指针(参见   一个例子的构造函数)。默认为less,返回   与应用小于运算符(a&lt; b)相同。地图对象使用   这个表达式确定了元素的位置   容器。映射容器中的所有元素都按此顺序排序   始终统治。

我从here

引用了这个