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;
}