前言
本人关于重载运算符一直不太清楚,现在弄明白了决定写一篇相对系统的博客!o( ̄▽ ̄)ブ
update(2021.10.17):回看自己的博客,重载运算符用到 operator 的建议传参都写成 const node &oth 的形式,防止玄学错误。
(虽然目前我还没有错过)
正文
一般来说,特殊类型的优先队列需要重载运算符来进行
但对于字符串按字典序排列,也可以直接写成:
priority_queue
(赖皮写法)
当然也可以通过重载运算符来实现
下面是关于重载运算符:
方法一:
一般的重载运算符:
struct Node
{
int num;
int cycle;
int count;
int zong;
bool operator < (const Node &a) const
{
return a.zong<zong; //首先按zong从小到大,然后按num从小到大!
return a.num<num;
}
};
字符串重载运算符:
struct Ha
{
string a;
bool operator < (const Ha& oth)const
{
//这里写排序函数
return a < oth.a;
}
};
priority_queue<Ha> q;
(本质上上面两个是同一种重载方法)
方法二:
一般的重载运算符:
struct cmp{
bool operator()(Node a,Node b) 首先按zong从小到大,然后按num从小到大!
{
if(a.zong!=b.zong)
return a.zong>b.zong;
if(a.num!=b.num)
return a.num>b.num;
}
};
字符串重载运算符:
struct cmp//注意cmp是结构体
{
bool operator()(string a,string b)
{
return a>b;
}
};//这里有分号
priority_queue<string,vector<string>,cmp> q;
值得注意的是,重载运算符都是重载小于号,因为c++中排序函数只用小于号
(个人觉得第二种更好理解,因为没有乱七八糟的&和const)
参考博客:https://blog.csdn.net/y990041769/article/details/18188377
原文链接: https://www.cnblogs.com/conprour/p/14316925.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/207614
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!