无法编译std :: map排序,为什么?

yeg*_*256 4 c++

这是我的代码:

map<string, int> errs;
struct Compare {
    bool operator() (map<string, int>::const_iterator l, 
        map<string, int>::const_iterator r) { 
        return ((*l).second < (*r).second); 
    }
} comp;
sort(errs.begin(), errs.end(), comp);
Run Code Online (Sandbox Code Playgroud)

无法编译.这就是我得到的:

no matching function for call to ‘sort(..’
Run Code Online (Sandbox Code Playgroud)

为什么这样?有人可以帮忙吗?谢谢!

Mar*_*tos 10

您无法对地图进行排序.它有自己的排序顺序,在构造时定义为默认(使用<)或传入比较器.


Jos*_*ley 6

根据定义,地图按其键排序,因此您无法通过其值来求助地图.

如果要按非默认顺序对键进行排序,可以提供备用比较功能作为地图的第三个模板参数.

如果您正在尝试按其值对地图进行排序,那么您是否可以尝试使用Boost.MultiIndex来制作双向地图


Nav*_*een 5

我假设你在做using namespace std;.在该sort方法中,要求迭代器是随机访问迭代器.但map迭代器是双向的,所以它不会编译.