C++结构体排序,优先队列,运算符重载
文章目录
- 基本数据类型排序
- 结构体排序
- 比较函数
- 重载结构体运算符
- 优先队列
- 另外一种方法
- 优先队列基本知识
基本数据类型排序
#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++结构体排序,优先队列,运算符重载相关推荐
- sort与结构体中的运算符重载
C++中重载小于号,通常是为了使用STL的算法. 举个最为简单的例子,排序. std::sort排序是基于大小顺序的,基本类型之间就存在大小于的关系, 排序就是按照从小到大的顺序调整序列. 在结构体中 ...
- -nan(ind) 重载运算符以及结构体排序
一. -nan(ind): nan:not a number:无法得到一个数字 ind:indeterminate: 不确定的 可能情况: 1. 分母为零 2. 对负数开平方 3. 有些编译器在对无穷 ...
- sort对结构体排序
1.排序方法: sort(数组起始指针,数组尾指针,排序规则); 数组起始指针,数组尾指针是左闭右开 排序规则可以省略,也可以用系统的,也可以自己写 2.例子: int a[]={9,2,4,5,10 ...
- python结构体排序_c++如何对自定义结构体排序
C++中,当 vector 中的数据类型为基本类型时,我们调用std::sort函数很容易实现 对vector中数据成员的升序或降序排序,然而当vector中的数据类型为自定义结构体类型或者类时,我们 ...
- qvector 结构体排序_C++结构体的应用_YCOJ
结构体是一种自定义的东西,用struct来定义.在他里面, 可以装许多东西,比如int,string,char,bool等等等等. 如: struct a{ string name; int a; i ...
- 还是贪心(结构体排序)
2128: 盾神与积木游戏 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 127 Solved: 39 [Submit][Status][Web Boa ...
- P1068 分数线划定 洛谷 (C++)(结构体排序)
简单的结构体排序,代码如下 #include <iostream> #include <cstdio> #include <algorithm> #include ...
- C#中结构体排序方法(Array.sort() + ICompare)
感觉C#比C++麻烦许多,资料也少,找了半天竟然没有找到一个能用的结构体排序. 这是待排序的结构体: public struct la{public int id;public int sb;}; 首 ...
- 【HDU】1862 EXCEL排序(结构体排序)
Problem Description Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能. Input 测试输入包含若干测试用例.每个测试用例的第1行包含两个整数 N (<= ...
最新文章
- php可以定义数组的常量吗
- SpringCloud微服务注册中心如何承载大型系统的千万级访问?源码及原理分析
- 点击按钮出现水波纹动画
- Wix 安装部署教程(十六) -- 自动生成多语言文件
- linux基础——linux进程间通信(IPC)机制总结
- Linux下.rar文件解压
- %rowtype mysql_Oracle %type和%rowtype小实例
- SWT中Button事件的几种不同写法
- 数据包捕获计算机网络实训,计算机网络-使用网络协议分析器捕捉和分析协议数据包...
- mvn jetty debug
- druid 异常 com.alibaba.druid.pool.GetConnectionTimeoutException
- 【Git/Github学习笔记】Github的使用介绍
- 怎么不能锁门_镜子能不能对着床
- 【 Codeforces Round #395 (Div. 2) E】Timofey and remoduling【数学思维题 —— 等差/等比数列】
- 搭建国产化统信UOS操作系统虚拟机
- 人工智能会取代程序员吗?
- 《数据密集型应用系统设计》笔记-8-流处理
- Sorted Adjacent Differences
- SAP BOM 多层展开及组件成本处理
- iOS7+系统自带条码扫描