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的时间复杂度
posted @ 2022-04-16 17:02  VxiaohuanV  阅读(27)  评论(0编辑  收藏  举报