• map,vecotr,数组,结构体 大杂烩


    排序:

    在结构体里面排序是很灵活的,可以满足很多情况

    数组的: 
    bool cmp(int a,int b)
    {
        return a>b;
    }
    vector <int> p[M];
    int val[M];
    map<vector<int>,int> mp;
    struct dian{
        int val;
        vector<int>p;
        bool operator <(const dian &t)const
        {
            if(val==t.val) return p<t.p;
            return val>t.val;
        }
    }node[M];
    View Code

    lower——bound(upper——bound)

    int a;      
      a=lower_bound(val+1,val+1+n,x)-val; // 数组的 ,找的值是 val【i】,返回的是 i; 
      a=lower_bound(p.begin(),p.end(),x)-p.begin(); // vector的  找到值是p【i】,返回的是i 当然可以是p【i】
      map<int,int> ::iterator p=mp.lower_bound(x);  // 查询的是键值 
      a=p->first/second;              // map的 
    View Code

      后记:为了方便记, 得到的是一个int(最后剪掉一个东东,相当于把那个类型剪掉,留下一个int)

    set<int>st, set代表的是 key值和val值相等,元素唯一且单调,其他情况和map差不多(时间复杂度,和操作) insert(),erase()这个值就行了

    用lower_bound时 p这样用 *p, 

    map的小知识:

       map[2]++;map[1]=4; // 这样弄了,就相当于 插入了一个键值
       map.size();       // 有多少个键值
       map[2]=0;        // 键值不会减少 
       map.erase(2)     // 删除
       map.count(x)     // 查询 有没有这个键值, 有返回1,没有返回 0 
    View Code

    离散化(数组的):

    注意:去重的时候多剪一个 1 

     for(ri i=1;i<=n;i++) 
      {
          read(val[i]);
          t[i]=val[i];
      }
      
      sort(t+1,t+1+n);
      int m=unique(t+1,t+1+n)-t-1;
      for(ri i=1;i<=n;i++)
      {
           val[i]=lower_bound(t+1,t+1+m,val[i])-t;
      }
        
    View Code

    map 的应用:

    • 查询某个值是否出现,和出现的次数,查询和修改都是log2的时间复杂度
  • 相关阅读:
    转移到新的个人独立博客。
    hdu5618 (三维偏序,cdq分治)
    平衡树维护动态凸包
    poj1986 LCA
    hdu2586 LCA
    LCA最近公共祖先 ST+RMQ在线算法
    hdu 3401 单调队列优化DP
    【转】单调队列优化DP
    CodeForces 548D 单调栈
    hdu3530 单调队列
  • 原文地址:https://www.cnblogs.com/Lamboofhome/p/16153473.html
Copyright © 2020-2023  润新知