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菜鸡日常 文章被收录于专栏
一般写一些打过的比赛题解以及不会的算法
查看17道真题和解析

