【发布时间】:2021-10-10 16:11:30
【问题描述】:
我创建了一个带有自定义比较器的priority_queue,它以字典顺序存储字符串,它按预期工作。[参考。 this]]
现在,我希望它在unordered_map 中具有价值,我得到了error: no matching constructor for initialization ...,我找到的最接近的是this。我意识到我也需要将比较器传递给构造函数,但是如何?
这是我现在的代码:
#include <iostream>
#include <vector>
#include <unordered_map>
#include <queue>
using namespace std; // Used to make code less verbose
int main() {
auto cmp = [](string s1, string s2){
return s1.compare(s2) > 0;
};
using myQuque = priority_queue<string, vector<string>, decltype(cmp)> ;
// This code works
myQuque pq(cmp);
pq.push("ZZ");
pq.push("AA");
pq.push("CC");
while(!pq.empty()){
cout << pq.top() << " ";
pq.pop();
}
// This doesn't. How do I pass 'cmp' to constructor?
unordered_map<string, myQuque> table;
auto p = table["r"];
p.push("ZZ");
p.push("AA");
}
然后我意识到我也可以在这个应用程序中使用 multiset,但我仍然想知道如何在 map 中使用带有自定义比较器的 priority_queue。
【问题讨论】: