unordered_set
定义:unordered_set<int>,unordered_set<string>,unordered_set<char> ……
当我定义:unordered_set<int> SET
SET.count(key)查找是否出现过:如果SET.count(key)!=0 ,表示存在key
SET.insert(x)读入
SET.size() 表示 SET中的个数
记得SET.clear();
//从后往前输出
遍历
for (auto &item : SET)
{
cout << item << endl;
}
unordered_map
定义:unordered_map<int,int>、unordered_map<string, double> ……
插入:例如将("ABC" -> 5.45) 插入unordered_map<string, double> hash中,hash["ABC"]=5.45
判断key是否存在:如果hash.count("ABC") != 0 表示存在ABC
//从后往前输出
遍历
for (auto &item : hash)
{
cout << item.first << ' ' << item.second << endl;
}
hash.size() 表示 hash 中的个数
map
定义:map<int,string>,map<string,string>……
//map会以键从小到大自动排序(前面那个元素)
遍历(map<int,string> S)
for (auto &item : S)
{
cout << item.first << ' ' << item.second << endl;
}
S.size() 表示 S 中的个数
S.clear() //清空元素
//S.find(key) 函数 !!!注意:当这个数没有在里面出现时 itr->first 是 S.size() itr->second 是 0
#include <bits/stdc++.h>
using namespace std;
int main()
{
map<int, int> S;
S.insert({ 2, 30 });
S.insert({ 1, 40 });
S.insert({ 3, 20 });
S.insert({ 4, 50 });
for (auto itr = S.find(3); itr != S.end(); itr++)
cout << itr->first
<< '\t' << itr->second << '\n';
return 0;
}
deque
deque<int> de;
de.push_front(x) 从头插入x;
de.pop_front() 删除头元素;
de.push_back(x) 从尾部插入x;
de.pop_back() 删除尾部元素;
de.back(); //返回最后一个元素
de.front(); //返回第一个元素
de.empty(); //判断是否为空
reverse(de.begin(),de.end());
//优先队列
priority_queue<pair<int,int>> heap // pair的比较,先比较第一个元素,第一个相等比较第二个
输入 : heap_push({x,y});
头节点 : heap.top();
删除该节点 heap.pop();
priority_queue<int> down; //大根堆
priority_queue<int, vector<int>, greater<int>> up; //小根堆
vector
定义:vector<int>,vector<pair<int,int>> ……
vector<pair<int,int>> heap;
输入:heap.push_back({x,y});
排序 :sort(heap.begin(),heap.end());
元素个数 :heap.size();
去重操作
vector<int> a;
sort(a.begin(),a.end());
a.erase(unique(a.begin(),a.end()),a.end());
(遍历)for(int i=0;i<a.size();i ++)
//返回的是已经排好序并且去重之后的数组