3

我正在创建一个std::map<a,b>使用a::operator<.

有没有办法在某个时候改变地图的类型,以便从现在开始由另一个排序算法排序a?它也需要重新排序地图的当前内容。

4

2 回答 2

8

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

std::map<a,b> map1;
... // operations on map1
std::map<a,b,Sorter> map2(map1.begin(), map1.end());
于 2012-06-20T21:23:29.083 回答
1

答案在于声明std::map

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

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

Compare : 比较类:一个接受两个键类型参数并返回一个布尔值的类。表达式 comp(a,b),其中 comp 是此比较类的对象,a 和 b 是键值,如果在严格的弱排序操作中将 a 放置在比 b 更早的位置,则应返回 true。这可以是实现函数调用运算符的类,也可以是指向函数的指针(参见构造函数的示例)。这默认为 less,它返回与应用小于运算符 (a < b) 相同的值。地图对象使用这个表达式来确定容器中元素的位置。地图容器中的所有元素始终遵循此规则进行排序。

我从这里引用了这个

于 2012-06-20T21:23:18.603 回答