• 优先队列的使用


      堆,一种非常重要的数据结构。能实现数据的自动排序,而且排序时间复杂度为O(nlogn),在n达到10^4时,O(n2)级算法就容易超时,但堆排序不会。堆可调用STL系统函数,简化代码,容易书写。一般情况,如果堆元素为数、字符、字符串都可有用默认的排序规则。如果元素是pair类型,其比较大小的方式为先比较第一个元素(pair.first),如果第一个元素相等,则比较第二个元素(pair.seconed)。如果元素是结构体呢?没有默认的排序,我们需要手动添加比较规则。

    结构体比较实现方法有两种:

      方法一:重载"<"运算符。

    struct person{
        string name;
        int age;
        bool operator < (const person x) const
        {
            return age<x.age;
        }
    };

      在优先队列中定义可以简写为priority_queue<person>hp;

      方法二:重写仿函数。

    struct cmp{
        bool operator ()(const person a,const person b)
        {
            return a.age<b.age;
        }
    };

      在优先队列中可以定义为:priority_queue<person,vector<person>,cmp>hp;

      如果你想改变大根/小根,只需要改变cmp中比较大小规则即可。

  • 相关阅读:
    km算法
    HDU 1358
    HDU 3746
    CF 432D
    HDU 4725
    14年百度之星资格赛第四题
    AC自动机
    RMQ
    HDU 4635
    HDU 3667
  • 原文地址:https://www.cnblogs.com/wendcn/p/12776262.html
Copyright © 2020-2023  润新知