【发布时间】:2021-07-25 10:41:04
【问题描述】:
我正在尝试使用自定义比较器创建优先级队列,但以下代码给了我一个编译错误:
auto comparator = [](std::pair<std::vector<int>, File&> const &a, std::pair<std::vector<int>, File&> const &b) {
return a.first.front() > b.first.front();
};
std::priority_queue<std::pair<std::vector<uint64_t>, File&>,
std::vector<std::pair<std::vector<uint64_t>, File&>>,
decltype(comparator)> pq;
这是我得到的错误:
在模板中:没有匹配的构造函数用于初始化 'std::priority_queue<:pair moderndbs::file>, std::vector<:pair moderndbs::file>>, (lambda at
【问题讨论】:
-
您的比较器知道如何比较
std::pair<std::vector<int>, File&>类型的值,但您正试图使用它来比较不同类型的值std::pair<std::vector<uint64_t>, File&> -
这并不能解决问题。
-
由于您只将
comparator的类型传递给优先级队列,而不是实例本身,因此队列必须默认构造一个。但是,在 C++20 之前,lambda 是不可默认构造的。您需要在启用 C++20 支持的情况下进行编译才能使其工作,或者将comparator传递给pq的构造函数,如std::priority_queue<...> pq{comparator}
标签: c++ templates stl std priority-queue