c++ - 在priority_queue中使用greater<char>()

标签 c++ function std

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

关于c++ - 在priority_queue中使用greater<char>(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66863931/

相关文章:

c# - 有趣的代码片段

c++ - 将 csv 文件的一行拆分为 std::vector?

c++ - 在哪里可以定义虚函数?

c++ - 无法从 const char[] 转换为 std :string *

c++,位图不会显示?

c++ - vector 迭代器不兼容

javascript - JQuery "undo"返回单击时调用另一个函数的操作

c++ - 将构造函数转换为函数的返回值

c++ - 获取迭代器范围的每个第 n 个元素

c++ - std:find()用于排序与未排序