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];
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的
后记:为了方便记, 得到的是一个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
离散化(数组的):
注意:去重的时候多剪一个 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; }
map 的应用:
- 查询某个值是否出现,和出现的次数,查询和修改都是log2的时间复杂度