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

  • 相关阅读:
    漂亮的代码5:数组与字符一样的操作
    漂亮的代码4:缓存器的妙用
    漂亮的代码3:flatten 一个数组
    漂亮的代码2:遍历文件夹目录,使用promise
    漂亮的代码1:计算器
    nodejs 代码设计模式1:同步函数变异步
    [翻译]现代java开发指南 第二部分
    Httpclient远程调用WebService示例
    Java代码使用正则验证和常用工具方法
    简单将集合的内容转为字符串
  • 原文地址:https://www.cnblogs.com/conprour/p/14316925.html
Copyright © 2011-2022 走看看