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

  • 相关阅读:
    el-table背景色透明
    判断数组对象里的属性值是否重复
    :Duplicate keys detected: 'xxx'. This may cause an update error.
    钉钉微应用附件下载方案
    探索JS引擎工作原理
    js深度优先遍历和广度优先遍历实现
    微前端qiankun从搭建到部署的实践
    浏览器与Node的事件循环(Event Loop)有何区别?
    JS
    微信小程序预览Word文档
  • 原文地址:https://www.cnblogs.com/conprour/p/14316925.html
Copyright © 2011-2022 走看看