在 priority_queue 中使用 greater<char>()
use greater<char>() in priority_queue
#include <iostream>
#include <iterator>
#include <queue>
using namespace std;
int main()
{
vector<char> a(256);
copy(istream_iterator<char>{ cin }, istream_iterator<char>{}, begin(a));
priority_queue<char> q{ less<char> (),a }; // less -> greater = compile error
while (!q.empty()) {
cout << q.top();
q.pop();
}
}
我正在努力练习 priority_queue。而且我不能使用 greater<char>()
而不是 less
为什么我不能?
问题是,给定 priority_queue<char> q ...
,比较类型将是 default template argument,即 std::less<char>
,如果您将 greater<char>
作为构造函数传递,则它不匹配参数。
您可以将所有模板参数显式指定为
priority_queue<char, vector<char>, greater<char>> q{ greater<char> (),a };
或者不指定任何模板参数以利用 class template argument deduction (C++17 起)。
priority_queue q{ greater<char> (),a };
#include <iostream>
#include <iterator>
#include <queue>
using namespace std;
int main()
{
vector<char> a(256);
copy(istream_iterator<char>{ cin }, istream_iterator<char>{}, begin(a));
priority_queue<char> q{ less<char> (),a }; // less -> greater = compile error
while (!q.empty()) {
cout << q.top();
q.pop();
}
}
我正在努力练习 priority_queue。而且我不能使用 greater<char>()
而不是 less
为什么我不能?
问题是,给定 priority_queue<char> q ...
,比较类型将是 default template argument,即 std::less<char>
,如果您将 greater<char>
作为构造函数传递,则它不匹配参数。
您可以将所有模板参数显式指定为
priority_queue<char, vector<char>, greater<char>> q{ greater<char> (),a };
或者不指定任何模板参数以利用 class template argument deduction (C++17 起)。
priority_queue q{ greater<char> (),a };