STL
set 和 multiset
set<int> s; multiset<int> ms; set<int>::iterator it; s.insert(n); //set的首位的迭代器表示 s.begin(),s.end(); //set 可以使用lower_bound和upper_bound二分查找 it = s.lower_bound(x); cout<<*it<<endl; s.erase(*it);
bitset
bitset<10> b;//它的每一个元素只能是0或1,每个元素仅用1bit空间 cout<<b.any()<<endl;//b中是否有1的二进制 cout<<b.count()<<endl;// b中为1的二进制个数 cout<<b.size()<<endl;//b的大小 cout<<b[pos]<<endl;//访问pos位置的二进制 cout<<b.test(pos)<<endl;//pos位置的二进制是否为1 b.set();//b中所有位置的二进制置零 b.reset();//b中所有位置的二进制置一 b.set(pos);//b中pos位置的置零 b.reset(pos);//b中pos位置的置一 //将一个01字符串转成bitset: string s; bitset<maxx> a[maxx]; cin>>s; for(int j=0;j<s.length();j++){ a[1][j] = (s[j] == '1'); } cout<<a[1]<<endl;
vector
vector<int> v; vector<int> v[maxn]; int k = upper_bound(v[x].begin(),v[x].end(),x);//vector照样也可以二分upper_bound和lower_bound vector<vector<int> > v;//相当于一个二维数组 sort(v.beign(),v.end());//vector也可以进行排序哦 v.push_back(x); v.pop_back();//队尾元素出栈 v.front(); v.back(); v.size(); int siz = unique(v.begin() , v.end()) - v.begin();//返回vector不同的数字的个数
map
map<int,int> mp; mp[x] = y; it = mp.find(x); mp.erase(it); mp.size();
unordered_map(hash map)
//unordered_map容器通过key访问单个元素要比map快 //unordered_map内部实现了一个哈希表(也叫散列表,通过把关键码值映射到Hash表中一个位置来访问记录,查找的时间复杂度可达到O(1),其在海量数据处理中有着广泛应用)。因此,其元素的排列顺序是无序的 unordered_map<int,int> mp;
stack
stack<int> s; s.push(x); s.pop(); s.top(); s.size();
queue
queue<int> q; q.push(x); q.pop(); q.front(); q.back(); q.size();
priority_queue
priority_queue<int> q1;//大根堆 priority_queue<int,vector<int> ,greater<int> > q2;//小根堆 q1.top(); q1.pop(); q1.size(); q1.push(x);
deque(双端队列)
deque<int> q;//定义双端队列 q.push_front(x);//队列头部插入元素x q.push_back(x);//队列尾部插入元素x q.front();//引用最前面的元素 q.back();//引用最后面的元素 q.pop_front();//删除队列最前面的元素 q.pop_back();//删除队列最后面的元素 q.size();//返回双端队列大小
map根据second排序
#include <bits/stdc++.h> using namespace std; #define ll long long typedef pair<int , int> pi; map<int ,int > mp; bool cmp(pi& p1,pi& p2){ return p1.second > p2.second; } int main() { int n,x; cin>>n; for(int i=1;i<=n;i++){ cin>>x; mp[x]++; } vector<pi> v(mp.begin() , mp.end()); sort(v.begin() , v.end() , cmp); for(int i=0;i<v.size();i++){ cout<<v[i].first<<" "<<v[i].second<<endl; } return 0; }
acm菜鸡日常 文章被收录于专栏
一般写一些打过的比赛题解以及不会的算法