比较器comp定义如下.它工作正常std::sort,但无法在构造函数中编译std::priority_queue.问题是什么?谢谢.
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
bool comp(int a, int b) { return a > b; }
int main()
{
vector<int> vec = {4, 2, 1, 3};
sort(vec.begin(), vec.end(), comp); // OK
priority_queue<int> q1(less<int>(), vec); // OK
priority_queue<int> q2(comp, vec); // Fail
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误信息:
error: no matching function for call to 'std::priority_queue<int>::priority_queue(bool (&)(int, int), std::vector<int>&)'
priority_queue<int> q2(comp, vec);
^
Run Code Online (Sandbox Code Playgroud)
该类型的默认比较的std::priority_queue是std::less<T>,其中T是的值类型.你正在传递一些类型的东西bool(*)(int, int).std::sort()作为一个函数可以推导出比较器的类型.类类型不能推断出它们的模板参数(但是 - 我们在C++委员会中讨论了未来的版本可能有类模板,其模板参数可以推导出来.
您可以使用
std::priority_queue<int, std::vector<int>, bool(*)(int, int)> q(comp);
Run Code Online (Sandbox Code Playgroud)
或者,避免难以内联的函数指针:
std::priority_queue<int, std::vector<int>, std::greater<int> > q;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |