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

C++ 将映射转换为优先级队列时出现问题,c++,dictionary,priority-queue,std-pair,C++,Dictionary,Priority Queue,Std Pair,请帮帮我,为什么它不起作用 我想将map转换为pairs的优先级队列,它将按照第二个参数进行排序 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)&

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

我想将map转换为pairs的优先级队列,它将按照第二个参数进行排序

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);
auto-cmp=[](pair&p1,pair&p2){返回p1.second>p2.second;};
优先级队列q;
映射m{1,1},{2,3},{4100};
用于(自动a:m)
q.推(a);

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

将代码更改为

priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> q(cmp);
优先级队列q(cmp);

Lambda函数没有默认构造函数(至少在某些C++版本中是这样),实际情况似乎很复杂

您显示的代码有什么问题?`请花些时间刷新,接受SO,阅读,以及。请在你的问题中加入一个恰当的答案。请解释“它不起作用”的含义。您看到了什么错误或问题?