首页 新闻 会员 周边

c++ 重载()操作符来定义优先级

0
悬赏园豆:50 [已解决问题] 解决于 2013-02-03 12:00

#include<queue>

#include<vector>

#include<iostream>

using namespace std;

struct mycomp

{

  bool operator()(const int&a,const int&b)//这个返回true or false 有什么用吗

  {return a>b;}

};

int main()

{

  priority_queue<int,vector<int>,mycomp> pq;

pq.push(1);//1进队列的时候 a和b是多少,这四个数进去的过程是怎样的??

pq.push(9);

pq.push(2);

pq.push(30);

while(pq.empty()!=true)

{cout<<pq.pop()<<" "; pq.pop();}

cout<<endl;

return o;

}

最后结果是:1 2 9 30 我就很不清楚1 9 2 30 输入的怎么就变成了1 2 9 30  哪位知道的大神能给我讲讲?

c++
yskyj的主页 yskyj | 初学一级 | 园豆:141
提问于:2013-01-31 20:05
< >
分享
最佳答案
0

priority_queue 是优先级队列,看它的定义:

template<class _Ty,
 class _Container = vector<_Ty>,
 class _Pr = less<typename _Container::value_type> >
 class priority_queue{};

注意 class _Pr ,它要求你提供一个实现了comp方法的类,你这里提供的就是 mycomp,这是早期的stl实现类似委托的一种方式(不同于函数指针),新的stl也提供了委托的实现。

收获园豆:50
Launcher | 高人七级 |园豆:45045 | 2013-02-01 09:42

谢谢大神,那()的重载具体怎样实现了,输入安大小排序的呢?

yskyj | 园豆:141 (初学一级) | 2013-02-01 13:26

@yskyj: 请看一下 STL 中的 functor 的知识:http://blog.csdn.net/chinaclock/article/details/5785135

Launcher | 园豆:45045 (高人七级) | 2013-02-01 14:53

@Launcher: 那篇文章看了两遍,我感觉我难以理解那篇文章,不过谢谢你给我提供帮助,谢谢!

yskyj | 园豆:141 (初学一级) | 2013-02-03 12:01

@yskyj: functor 是一种编程技巧,规避了函数指针,使用C++支持的操作符重载来实现函数指针的功能。

Launcher | 园豆:45045 (高人七级) | 2013-02-04 09:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册