如何按值实现STL地图排序?
例如,我有一张地图m:
map<int, int> m;
m[1] = 10;
m[2] = 5;
m[4] = 6;
m[6] = 1;
Run Code Online (Sandbox Code Playgroud)
我想按照m价值对地图进行排序.所以,如果我打印地图,我想得到如下结果:
m[6] = 1
m[2] = 5
m[4] = 6
m[1] = 10
Run Code Online (Sandbox Code Playgroud)
我怎样才能以这种方式对地图进行排序?有什么方法可以用排序值处理键和值吗?
似乎我可以对a进行排序std::vector<std::pair<int, std::string>>,std::pair它将根据int值进行排序.这是一个定义明确的事情吗?
是否std::vector<std::pair<int, std::string>>有基于它的元素的默认排序?
在Python中,给定一个列表,我可以通过一个关键函数对它进行排序,例如:
>>> def get_value(k):
... print "heavy computation for", k
... return {"a": 100, "b": 30, "c": 50, "d": 0}[k]
...
>>> items = ['a', 'b', 'c', 'd']
>>> items.sort(key=get_value)
heavy computation for a
heavy computation for b
heavy computation for c
heavy computation for d
>>> items
['d', 'b', 'c', 'a']
Run Code Online (Sandbox Code Playgroud)
如您所见,列表不是按字母顺序排序,而是按返回值排序get_value().
C++中有等价的吗?std::sort()只允许我提供自定义比较器(相当于Python items.sort(cmp=...)),而不是关键功能.如果没有,是否有任何经过充分测试,高效,公开可用的等效实现,我可以放入我的代码?
请注意,Python版本仅为key每个元素调用一次函数,而不是每次比较调用两次.