上海市建设咨询协会网站,dw和vs做网站,wordpress制作图片站,wordpress固定字段涉及知识点#xff1a;
1.重载运算符的知识
2.sort函数的使用
3.高精度排序 sort函数的用法#xff1f;
通过面向百度GOOGLE编程的我#xff0c;得知#xff0c;sort的用法
sort函数详解#xff08;史上最完整QAQ#xff09; - AlvinZH - 博客园
对于数组而言…涉及知识点
1.重载运算符的知识
2.sort函数的使用
3.高精度排序 sort函数的用法
通过面向百度GOOGLE编程的我得知sort的用法
sort函数详解史上最完整QAQ - AlvinZH - 博客园
对于数组而言sort语法结构为 sort数组名数组名数组长度//可以有第三个参数为比较函数一般来说都是要做一个比较函数的。
对于vector容器而言sort语法结构为 sort 迭代器.begin(),迭代器.end()//可以有第三个参数
重载运算符有什么用
可以扩充各种操作符更方便运用和避免部分复杂语法。
在本篇文章中重载小于号使比较操作放在结构体内进行相比于比较函数更加节省时间访问速度更快
语法结构为 bool operator 需要重载的符号 形参列表{ to do }
bool operator (const people orter)const{return z orter.z
}
例题1洛谷算法1-2 P5143 攀岩者
传送门攀爬者 - 洛谷 思路 根据题目的意思先要将输入的数据进行一个关于高度成员的排序此时有两种思路1.sort 做一个比较函数来比较结构体成员大小
2.sort利用重载技术重载小于号符号使比较在结构体内部进行。
上题解
#define _CRT_SECURE_NO_WARNINGS 1
#includeiostream
#includealgorithm
#includemath.h
using namespace std;
#define MAX 5000
struct Node {double x, y, z;bool operator (const Node other)const {return z other.z;//高度逐渐增高/}
}NodeXYZ[MAX];
int main()
{int n;cin n;for (int i 0; i n; i) {scanf(%lf%lf%lf, NodeXYZ[i].x, NodeXYZ[i].y, NodeXYZ[i].z);}sort(NodeXYZ, NodeXYZ n);//根据高度从小到大排序。这里对小于号重载sort排序在结构体内部进行节省时间double distance 0;double cx NodeXYZ[0].x, cy NodeXYZ[0].y, cz NodeXYZ[0].z;for (int i 0; i n; i) {distance sqrt(abs(cx - NodeXYZ[i].x) * abs(cx - NodeXYZ[i].x) abs(cy - NodeXYZ[i].y) * abs(cy - NodeXYZ[i].y) abs(cz - NodeXYZ[i].z) * abs(cz - NodeXYZ[i].z));//两点的欧几里得距离cx NodeXYZ[i].x;cy NodeXYZ[i].y;cz NodeXYZ[i].z;}printf(%.3lf\n, distance);
} 什么是高精度排序
高精度排序有多种表示方式有用数组的也可以用string做成字符串。本次使用后者
我们知道编译器无法去接受特别大的数如9999这时候就要利用的高精度的知识。
通过将一大串数字转化成字符串的思想或者把几个数字存在数组的一个位置中也被称压缩高精度就可以实现编译器的读写。 例题2 洛谷算法1-2 P1781 宇宙总统
传送门宇宙总统 - 洛谷 思路 数据过大这时候就要考虑高精度的排序方法先做一个string类型的变量for循环连续输入string变量。再去比较这几个数的长度
1.如果长度不一大的作为max。
2.如果长度相同比较值的大小。
上题解
#define _CRT_SECURE_NO_WARNINGS 1
#includeiostream
using namespace std;
#includestringint main() {string max ;//一开始把max定义i成空格后续进行比较大的就替换string in;int n,id;//id是记录最多人的编号cin n;for (int i 1; i n; i) {cin in;int inSize in.size();int maxSize max.size();if (inSize maxSize || (inSize maxSize in max)) {max in;id i;}}cout id endl max;
} 最后来一道真正需要用到结构体成员排序的题
例题3 洛谷算法1-2 P1093 奖学金
传送门[NOIP2007 普及组] 奖学金 - 洛谷 题解
#define _CRT_SECURE_NO_WARNINGS 1
#includeiostream
using namespace std;
#define MAX 500
#includealgorithmstruct people {int chinese;int english;int math;int sum;int num;//编号
}students[MAX];
//比较函数一般自己构造。结构体部分元素的排序通过sort的比较函数部分实现。
bool compare(people s1, people s2)
{if (s1.sum s2.sum) return 1;else if (s1.sum s2.sum) return 0;else{if (s1.chinese s2.chinese) return 1;else if (s1.chinese s2.chinese) return 0;else{if (s1.num s2.num) return 0;else return 1;}}
}
int main() {int n;cin n;for (int i 1; i n; i) {students[i].num i;cin students[i].chinese students[i].english students[i].math;students[i].sum students[i].chinese students[i].english students[i].math;}sort(students1, students1 n, compare);for (int i 1; i n ; i)cout students[i].num students[i].sum endl;
} 这里我一开始错了语法错误是people成员未定义仔细排查才知道原来是把比较函数放在结构体前面了导致people成员未定义 今天的文章就分享到这编程小白知识掌握尚浅若有出入和漏洞希望大佬们能提点一二。