【发布时间】:2016-04-23 09:35:46
【问题描述】:
我们有一个question,它讨论了如何在 C++ 中的priority_queue 中使用比较器。他将重载的operatorclass(或struct)作为第三个参数,它工作正常。但是bool 功能不起作用。为什么 ?但它在<algorithm> 的sort 中运行良好。当我查看文档 (priority_queue && algo/sort) 时,他们都将class Compare 作为可选的第三个参数。
#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
#include <vector>
using namespace std;
bool cmp (const int &a,const int &b){ return a > b; }
struct cmp2
{
bool operator() (const int &p1,const int &p2)
{
return p1 > p2;
}
};
int main ()
{
// freopen("test.txt","r",stdin);
int a[10];
vector<int> b(10);
sort( a , a + 10, cmp ); // working cool
sort( b.begin() , b.end() , cmp); // working great
priority_queue<int, vector<int> , cmp2 > x; // as usual, working....
priority_queue<int, vector<int> , cmp > y; // not working why ?
return 0;
}
错误:
A:\pqvsarray.cpp In function 'int main()':
27 40 A:\pqvsarray.cpp [Error] type/value mismatch at argument 3 in template parameter list for 'template<class _Tp, class _Sequence, class _Compare> class std::priority_queue'
27 40 A:\pqvsarray.cpp [Error] expected a type, got 'cmp'
27 43 A:\pqvsarray.cpp [Error] invalid type in declaration before ';' token
那么,为什么会有差异?
【问题讨论】:
-
因为priority_queue模板需要一个类型,但是你给了它一个函数指针。
-
那么,
sort如何/为什么要使用function pointer? -
@SelçukCihan 根据the priority_queue documentation,它可以是函数指针:这可以是函数指针或函数对象
-
@azam 因为在排序中,您实际上是在调用一个方法。但是,对于 priority_queue,您所做的是通过提供模板参数来指定您想要的优先级队列。这就是区别。
标签: c++ sorting stl compare priority-queue