我正在创建一个std::map<a,b>
使用a::operator<
.
有没有办法在某个时候改变地图的类型,以便从现在开始由另一个排序算法排序a
?它也需要重新排序地图的当前内容。
您必须创建另一个地图,并将第一个地图的元素复制到第二个地图中,如下所示:
std::map<a,b> map1;
... // operations on map1
std::map<a,b,Sorter> map2(map1.begin(), map1.end());
答案在于声明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) 相同的值。地图对象使用这个表达式来确定容器中元素的位置。地图容器中的所有元素始终遵循此规则进行排序。
我从这里引用了这个