我正在创建std::map<a,b>
,其中订购条件定义为a::operator<
在某些时候是否有任何方法可以更改地图的类型,以便从现在开始按a
上的另一个排序算法排序?它还需要重新排序地图的当前内容
感谢
答案 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
引用了这个