C++关于string 的优先队列以及重载运算符
前言
本人关于重载运算符一直不太清楚,现在弄明白了决定写一篇相对系统的博客!o(* ̄▽ ̄*)ブ
update(2021.10.17):回看自己的博客,重载运算符用到 operator 的建议传参都写成 const node &oth 的形式,防止玄学错误。
(虽然目前我还没有错过)
正文
一般来说,特殊类型的优先队列需要重载运算符来进行
但对于字符串按字典序排列,也可以直接写成:
priority_queue<string,vector<string>,greater<string> >(注意两个> >中间有空格)
(赖皮写法)
当然也可以通过重载运算符来实现
下面是关于重载运算符:
方法一:
一般的重载运算符:
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