zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    C语言文件操作函数大全
    iOS
    HDU 5042 GCD pair 预处理+二分 分段
    swoole新手教程01-环境搭建及扩展安装
    Cocos2d-X中的Slider控件
    CSS之BFC
    代理server的概要知识
    C#比較对象的相等性
    Effective C++ 35,36,37
    oled屏幕
  • 原文地址:https://www.cnblogs.com/conprour/p/14316925.html
Copyright © 2011-2022 走看看