参考文章(31条消息) c++优先队列(priority_queue)用法详解_吕白_的博客-CSDN博客_c++优先队列
1、sort排序 1、1sort排序的本质(伪)sort(地址,地址,排序bool函数),导入的前两个参数是地址
所以简便的对于数组,有写法如下:
int arr[10]; sort(arr,arr+10);1、2自定义的排序
降序
bool compare(int a,int b) {//必须是bool返回值类型,否则无效 return a>b; }
升序反之即可。
个人理解,比较符的方向即代表排序序列的升降 (方便记忆)
1、3实 ***2、优先队列#include#include using namespace std; bool compare(int a,int b) {//必须是bool返回值类型 return a>b; } int main() { int arr[10]; for (int i = 0; i < 10; ++i) { arr[i] = 10-i; } sort(arr, arr + 10,compare); for (int i = 0; i < 10; ++i) { cout << arr[i] << " "; } cout << endl; } 细节:对于自定义数据类型,必须自定义排序方式,(很好理解,即sort不认识自定义数据类型,没有默认的排序方式)
参考文章(31条消息) c++优先队列(priority_queue)用法详解_吕白_的博客-CSDN博客_c++优先队列
2、1优先队列的本质本质上是堆实现,支持大部分的队列 *** 作
2、2优先队列的自定义排序默认是大顶堆,即降序
可以自己调整如下:
//升序队列 priority_queue,greater > q; //降序队列 priority_queue ,less >q; //greater和less是std实现的两个仿函数(就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了)
对于自定义数据类型,则必须明白priority_queue 的参数列表(感兴趣的可以看此数据结构的原代码)
priority_queue
Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector),Functional 就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆
对于自定义的数据类型同sort,必须定义排序Functional,并且细节的,Functional需要为数据类型,如:(此为方法二,法一见2、3)
struct tmp2 //重写仿函数 { bool operator() (tmp1 a, tmp1 b) { return a.x < b.x; //大顶堆,降序 } };2、3实 ***
struct tmp1 //运算符重载< { int x; tmp1(int a) { x = a; } bool operator<(const tmp1& a) const//没有默认操作,所以必须重载, { return x > a.x; //大顶堆 } }; //方法2 struct tmp2 //重写仿函数 { bool operator() (tmp1 a, tmp1 b) { return a.x > b.x; //大顶堆,降序 //return } }; int main() { tmp1 a(1); tmp1 b(2); tmp1 c(3); priority_queue3、比较自定义排序(sort与优先队列)d; d.push(b); d.push(c); d.push(a); while (!d.empty())//默认——大顶堆,降序 { cout << d.top().x << 'n'; d.pop(); } cout << endl; priority_queue , tmp2> f; f.push(c); f.push(b); f.push(a); while (!f.empty()) { cout << f.top().x << 'n'; f.pop(); } }
浅显的:(本篇文章最想表达的东西)
sort函数:升序,a
优先队列:升序,a.x>b.x
深层的:(先挖坑,我也还在学习)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)