• 堆STL和重载运算符


    https://www.cnblogs.com/kylara/p/9804251.html

    大根堆:
        1.priority_queue<int> q;【默认

        2. priority_queue< node,vector<node>,less<node> > q;【自带比较函数

    小根堆:
        priority_queue< node,vector<node>,greater<node> > q;【自带比较函数

    重载运算符:

    1.定义struct node 之后重载
    这是小根堆

    priority_queue<node>q;//或 priority_queue< node,vector<node>,less<node> >q;
    bool operator<(node a,node b)//或写做(const node &a,const, node &b) 更快
    {
    return a.y>b.y;//以y从小到大排序
    }

    2.在定义struct node时重载
    struct node
    {
    int id,v;
    bool operator<(const node &a) const{
    return v<a.v;//以v从大到小排序
    }
    };
    priority_queue<node>q;

    3.定义友元操作类重载函数
    struct node
    {
    int v;
    friend bool operator<(const node &a,const node &b){
    return a.v<b.v; //按v从大到小排列
    }
    };
    priority_queue<node>q;

    自定义比较函数模板结构
    struct cmp
    {
    bool operator ()(const node &a, const node &b)
    {
    return a.v>b.v;// 按照v从小到大排列
    }
    };
    priority_queue<node,vector<node>,cmp> q;

    #include <iostream>
    #include <cstdio>
    #include <queue>
    #include <vector>
    using namespace std;
    struct node
    {
    int id,v;
    //id为位置,v为权值 
    bool operator<(const node &a) const
    {
        return v<a.v;//以v从大到小排序
    }
    };
    priority_queue<node> q;
    int main()
    {
    	for (int i=1;i<=5;i++)
    	{
    		int a,b;
    		cin>>a>>b;
    		node temp;
    		temp.id=a;
    		temp.v=b;
    		q.push(temp);
    	}
    	cout<<"the result is "<<endl;
    	while (q.size()>0)
    	{
    		node aa;
    		aa=q.top();
    		q.pop();
    		cout<<aa.id<<"   "<<aa.v<<endl;
    	}
    }
    /*
    1 7
    9 5
    3 8
    4 6
    6 4
    the result is
    3   8
    1   7
    4   6
    9   5
    6   4
    
    */ 
    

      

    #include <iostream>
    #include <cstdio>
    #include <queue>
    #include <vector>
    using namespace std;
    struct node
    {
    int id,v;
    //id为位置,v为权值 
    bool operator<(const node &a) const
    {
    //保证位置编号从小到大,位置编号一样则权值从小到大 
    //有双关键字时一定要看下第一个关键是否相等 if (id==a.id) return v>a.v; else return id>a.id; //return v<a.v;//以v从大到小排序 } }; priority_queue<node> q; int main() { for (int i=1;i<=5;i++) { int a,b; cin>>a>>b; node temp; temp.id=a; temp.v=b; q.push(temp); } cout<<"the result is "<<endl; while (q.size()>0) { node aa; aa=q.top(); q.pop(); cout<<aa.id<<" "<<aa.v<<endl; } } /* 1 3 1 9 1 2 9 8 7 6 the result is 1 2 1 3 1 9 7 6 9 8 */

      

  • 相关阅读:
    索引法则--少用OR,它在连接时会索引失效
    索引法则--LIKE以%开头会导致索引失效进而转向全表扫描(使用覆盖索引解决)
    索引法则--字符串不加单引号会导致索引失效
    索引法则--IS NULL, IS NOT NULL 也无法使用索引
    tomcat管理模块报401 Unauthorized
    MySQL报Too many connections
    JDBC连接MySql例子
    linux安装jdk并设置环境变量(看这一篇文章即可)
    深度解析Java可变参数类型以及与数组的区别
    MySQL真正的UTF-8字符集utf8mb4
  • 原文地址:https://www.cnblogs.com/cutemush/p/13781729.html
Copyright © 2020-2023  润新知