C++优先队列的基本使用方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++优先队列的基本使用方法
#include
#include
#include
using namespace std;
struct node
{
friend bool operator< (node n1, node n2)
{
return n1.priority < n2.priority;//"<"为从大到小排列,">"为从小打到排列
}
int priority;
int value;
};
int main()
{
const int len = 5;
int i;
int a[len] = {3,5,9,6,2};
//示例1
priority_queue
for(i = 0; i < len; i++)
qi.push(a[i]);
for(i = 0; i < len; i++)
{
cout< qi.pop(); } cout< //示例2 priority_queue for(i = 0; i < len; i++) qi2.push(a[i]); for(i = 0; i < len; i++) { cout< qi2.pop(); } cout< //示例3 priority_queue node b[len]; b[0].priority = 6; b[0].value = 1; b[1].priority = 9; b[1].value = 5; b[2].priority = 2; b[2].value = 3; b[3].priority = 8; b[3].value = 2; b[4].priority = 1; b[4].value = 4; for(i = 0; i < len; i++) qn.push(b[i]); cout<<"优先级"<<'\t'<<"值"< for(i = 0; i < len; i++) { cout< qn.pop(); } return 0; } 对于队列里元素为一个结构体类型,按照某一个属性排序,就需要对比较函数进行重载 小结一下: 1、若是定义值类型对象,如: int main() { priority_queue node n1; n1.a = 9; node n2; n2.a = 2; node n3; n3.a = 50; qn.push(n1); qn.push(n2); qn.push(n3); int size = qn.size(); for ( int i = 0; i < size; i++) { cout << qn.top().a << endl; qn.pop(); } return 0; } 则定义优先级的时候,直接在类中写个friend 的操作符重载函数即可: class node { public : int a; node(){} node( int x):a(x){} friend bool operator<( const node ne1, const node ne2)//参数也可以为引用,值传递{ if (ne1.a > ne2.a) { return true ; } else { return false ; } } }; 其中在c++primer第三版中文版中关于操作符重载有如下描述: "程序员只能为类类型或枚举类型的操作数定义重载操作符我们可以这样来实现把重载操作符声明为类的成员或者声明为名字空间成员同时至少有一个类或枚举类型的参数 按值传递或按引用传递" 因此不可用指针类型的参数; 2、如果想定义一个指针类型的优先队列,那就不可这么简单的定义了,你需要自定义一个自己的比较函数,在priority_queue的模板函数中,我们可以利用这样一个 template _Container::value_type> >模板,在我们的程序代码中,则需要自己定义一个类来定义第三个模板参数,如: class nodePointerComparer {