将映射转换为优先级队列时出现问题



请帮帮我,为什么它不起作用?

我想转换映射<int,int>对的优先级队列,该队列将按第二个参数排序。

auto cmp = [](pair<int, int>& p1, pair<int, int>& p2) {return p1.second > p2.second;};
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> q;
map<int, int> m{{1,1}, {2,3}, {4,100}};
for (auto a : m)
q_.push(a);

我想得到这样一个pq,按优先级的降序{{4100},{2,3},{1,1}。

将代码更改为此

priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> q(cmp);

Lambda函数没有默认的构造函数(至少在某些版本的C++中是这样(,真实情况似乎很复杂。https://en.cppreference.com/w/cpp/language/lambda