结构体内嵌比较函数bool operator < (const p &a)const
最近看见有人在使用sort()函数进行排序时,使用 operator <(const node &a)const
这种形式, 自己不是很懂,所以查了下资料,记录一下。
struct node { //定义一个结构体node(节点)
int x;
int y;
int len; //node中有3个成员变量x,y,len
bool operator <(const node &a)const { //重载<操作符。可以对两个node使用<操作符进行比较
return len<a.len;
}
};
直接写比较函数是裸的len表示当前的值,如果len<a.len,那么就是从小到大排序。
括号中的const表示参数a对象不会被修改,最后的const表明调用函数对象不会被修改!
例如:
#include <iostream>
#include <algorithm>
using namespace std;
struct node { //定义一个结构体node(节点)
int x;
int y;
int len; //node中有3个成员变量x,y,len
node(){} // 用以不初始化就定义结构体变量
node(int _x, int _y, int _len): x(_x), y(_y), len(_len) {}
bool operator <(const node &a)const { //重载<操作符。可以对两个node使用<操作符进行比较
return len < a.len;
}
};
int main()
{
node pt[3];
pt[0] = node(1, 2, 6);
pt[1] = node(3, 4, 4);
pt[2] = node(6,1, 9);
sort(pt, pt + 3);
for(int i = 0; i < 3; i ++)
cout << pt[i].len << " ";
return 0;
}
直接使用sort(pt, pt + 3)
就可以完成对pt数组的排序。
另外,也可以使用自己定义bool cmp(node a, node b)
来实现
#include <iostream>
#include <algorithm>
using namespace std;
struct node { //定义一个结构体node(节点)
int x;
int y;
int len; //node中有3个成员变量x,y,len
node(){} // 用以不初始化就定义结构体变量
node(int _x, int _y, int _len): x(_x), y(_y), len(_len) {}
// bool operator <(const node &a)const { //重载<操作符。可以对两个node使用<操作符进行比较
// return len < a.len;
// }
};
bool cmp(node a, node b)
{
return a.len < b.len;
}
int main()
{
node pt[3];
pt[0] = node(1, 2, 6);
pt[1] = node(3, 4, 4);
pt[2] = node(6,1, 9);
sort(pt, pt + 3, cmp);
for(int i = 0; i < 3; i ++)
cout << pt[i].len << " ";
return 0;
}
ps: caiji一枚,努力刷题~~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人