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

posted @ 2021-01-23 11:13  conprour  阅读(702)  评论(1编辑  收藏  举报