在 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 };