文章目录

  • 基本数据类型排序
  • 结构体排序
    • 比较函数
    • 重载结构体运算符
  • 优先队列
    • 另外一种方法
    • 优先队列基本知识

基本数据类型排序

#include <algorithm>
#include <iostream>
using namespace std;int main(){int arr[] = {2,1,3,4,5,6,8,7,9};sort(arr,arr+9); // 排序for(int i = 0; i < 9; i++){cout << arr[i] << " ";}return 0;
}

输出的结果是从小到大

如果从大到小呢?

#include <algorithm>
#include <iostream>
using namespace std;//从小到大
bool cmp(int a,int b){return a < b;
}
// 从大到小
bool cmp2(int a,int b){return a > b;
}int main(){int arr[] = {2,1,3,4,5,6,8,7,9};sort(arr,arr+9,cmp2); // cmp函数名放到sort的第三个参数 for(int i = 0; i < 9; i++){cout << arr[i] << " ";}return 0;
}

结构体排序

比较函数

结构体排序也是一样的,比如根据年龄排序,根据姓名排序…

#include <algorithm>
#include <iostream>
using namespace std;struct Node{int age;Node(){}Node(int age2){age = age2;}
};bool cmp1(Node &a,Node &b){return a.age > b.age; //从大到小
}
bool cmp2(Node &a,Node &b){return a.age < b.age; //从小到大
}int main(){Node nodes[3]; nodes[0].age = 2;nodes[1].age = 1; nodes[2].age = 3;sort(nodes,nodes+3,cmp1);for(int i = 0; i < 3; i++){cout << nodes[i].age << " ";}return 0;
}

重载结构体运算符

另外一种方法

struct Node{int age;Node(){}Node(int age2){age = age2;}bool operator<(const Node b) const {return age < b.age;  // < 代表从小到大,> 代表从大到小 }
};int main(){Node nodes[3]; nodes[0].age = 2;nodes[1].age = 1; nodes[2].age = 3;sort(nodes,nodes+3); //会根据 对象node的重载运算符进行排序for(int i = 0; i < 3; i++){cout << nodes[i].age << " ";}return 0;
}

跟据年龄排序,年龄一样的按照姓名,排序

#include <algorithm>
#include <string.h>
#include <iostream>
using namespace std;struct Node{string name; //姓名 int age;Node(){}Node(int age2){age = age2;}//根据年龄排序,年龄一样的按照姓名排序 bool operator<(const Node b) const {if(age == b.age){return name < b.name; // 从小到大 }else{return age < b.age; // 从小到大 }}
};int main(){Node nodes[3]; nodes[0].age = 3; nodes[0].name = "CC";nodes[1].age = 1; nodes[1].name = "AB";nodes[2].age = 1; nodes[2].name = "AA";sort(nodes,nodes+3);for(int i = 0; i < 3; i++){cout << nodes[i].age  << " " << nodes[i].name << endl;}return 0;
}

优先队列

< 是从大到小
>是从小到大
与sort函数的比较恰恰相反

#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;struct Node{int age; //年龄 Node(){}Node(int age):age(age){};bool operator<(const Node b) const {// < 是 从大到小// > 是 从小到大// 与sort() 恰恰相反 return age < b.age; // 从大到小    }
};int main(){Node nodes[3]; nodes[0].age = 3; nodes[1].age = 1; nodes[2].age = 2; priority_queue<Node> q;q.push(nodes[0]);q.push(nodes[1]);q.push(nodes[2]);while(!q.empty()){cout << q.top().age << endl;q.pop(); }return 0;
}

另外一种方法

#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;struct Node{int age; //年龄 Node(){}Node(int age):age(age){};
};
// 定义cmp结构体
struct cmp{bool operator()(Node a,Node b){//return a.age > b.age; // 从小到大return a.age < b.age;  //从大到小 }
};int main(){Node nodes[3]; nodes[0].age = 3; nodes[1].age = 1; nodes[2].age = 2; priority_queue<Node,vector<Node>,cmp> q;q.push(nodes[0]);q.push(nodes[1]);q.push(nodes[2]);while(!q.empty()){cout << q.top().age << endl;q.pop(); }return 0;
}

优先队列基本知识

小顶堆与大顶堆
基础类型默认的是大顶堆,从大到小排序

int main(){//基础类型默认的是大顶堆,从大到小排序priority_queue<int> q1;q1.push(2); q1.push(1); q1.push(3);while(!q1.empty()){cout << q1.top() << " ";q1.pop(); }return 0;
}

int main(){priority_queue<int,vector<int>,greater<int> > q1; // 从小到大 小顶堆priority_queue<int,vector<int>,less<int> > q2; // 从大到小  大顶堆q1.push(2); q2.push(2); q1.push(1); q2.push(1); q1.push(3); q2.push(3); while(!q1.empty()){cout << q1.top() << " ";q1.pop(); }cout << endl;while(!q2.empty()){cout << q2.top() << " ";q2.pop(); }return 0;
}

C++结构体排序,优先队列,运算符重载相关推荐

  1. sort与结构体中的运算符重载

    C++中重载小于号,通常是为了使用STL的算法. 举个最为简单的例子,排序. std::sort排序是基于大小顺序的,基本类型之间就存在大小于的关系, 排序就是按照从小到大的顺序调整序列. 在结构体中 ...

  2. -nan(ind) 重载运算符以及结构体排序

    一. -nan(ind): nan:not a number:无法得到一个数字 ind:indeterminate: 不确定的 可能情况: 1. 分母为零 2. 对负数开平方 3. 有些编译器在对无穷 ...

  3. sort对结构体排序

    1.排序方法: sort(数组起始指针,数组尾指针,排序规则); 数组起始指针,数组尾指针是左闭右开 排序规则可以省略,也可以用系统的,也可以自己写 2.例子: int a[]={9,2,4,5,10 ...

  4. python结构体排序_c++如何对自定义结构体排序

    C++中,当 vector 中的数据类型为基本类型时,我们调用std::sort函数很容易实现 对vector中数据成员的升序或降序排序,然而当vector中的数据类型为自定义结构体类型或者类时,我们 ...

  5. qvector 结构体排序_C++结构体的应用_YCOJ

    结构体是一种自定义的东西,用struct来定义.在他里面, 可以装许多东西,比如int,string,char,bool等等等等. 如: struct a{ string name; int a; i ...

  6. 还是贪心(结构体排序)

    2128: 盾神与积木游戏 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 127 Solved: 39 [Submit][Status][Web Boa ...

  7. P1068 分数线划定 洛谷 (C++)(结构体排序)

    简单的结构体排序,代码如下 #include <iostream> #include <cstdio> #include <algorithm> #include ...

  8. C#中结构体排序方法(Array.sort() + ICompare)

    感觉C#比C++麻烦许多,资料也少,找了半天竟然没有找到一个能用的结构体排序. 这是待排序的结构体: public struct la{public int id;public int sb;}; 首 ...

  9. 【HDU】1862 EXCEL排序(结构体排序)

    Problem Description Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能. Input 测试输入包含若干测试用例.每个测试用例的第1行包含两个整数 N (<= ...

最新文章

  1. php可以定义数组的常量吗
  2. SpringCloud微服务注册中心如何承载大型系统的千万级访问?源码及原理分析
  3. 点击按钮出现水波纹动画
  4. Wix 安装部署教程(十六) -- 自动生成多语言文件
  5. linux基础——linux进程间通信(IPC)机制总结
  6. Linux下.rar文件解压
  7. %rowtype mysql_Oracle %type和%rowtype小实例
  8. SWT中Button事件的几种不同写法
  9. 数据包捕获计算机网络实训,计算机网络-使用网络协议分析器捕捉和分析协议数据包...
  10. mvn jetty debug
  11. druid 异常 com.alibaba.druid.pool.GetConnectionTimeoutException
  12. 【Git/Github学习笔记】Github的使用介绍
  13. 怎么不能锁门_镜子能不能对着床
  14. 【 Codeforces Round #395 (Div. 2) E】Timofey and remoduling【数学思维题 —— 等差/等比数列】
  15. 搭建国产化统信UOS操作系统虚拟机
  16. 人工智能会取代程序员吗?
  17. 《数据密集型应用系统设计》笔记-8-流处理
  18. Sorted Adjacent Differences
  19. SAP BOM 多层展开及组件成本处理
  20. iOS7+系统自带条码扫描

热门文章

  1. 计算机学院创意方阵,计算机学院运动会入场时求创意方阵。
  2. ARM的嵌入式Linux移植体验之基本概念
  3. 石基信息:完成海信智能商用57.75%股份交割
  4. 【Hive】Hive 创建表
  5. 《平白语录》平白烽火戏码农
  6. ⚡还敢宕机,佛祖教你做人(11副图+内附源码+效果展示)⚡
  7. 百度主动推送不收录怎么办?
  8. Pinia——State
  9. 披萨店小程序_比萨问题–建造者与装饰者
  10. 这是一个悲伤的程序员爱情故事 ? !