michaele  

vector

头文件

#include<vecotr>

声明

vector<int> a;
vector<int> b[233];
struct rec{...}; vector<rec> c;

函数调用

.size()返回vector数组的长度
.empty()若为空,则返回1,否则返回0;
.begin() / .end()返回指向第一个/最后一个元素的迭代器
.front() / .back()返回第一个/最后一个元素,等价于*a.begin()/*--a.end() a[0]/a[size-1];
.push_back(x)将x插入到vector a的尾部
.pop_back()删除vector a的最后一个元素

queue

头文件

#include<queue>

声明

queue<int> q;
struct rec{...};
queue<rec> q;
priority_queue<int> q;
priority_queue< pair<int,int> > q;

queue 循环队列 先进先出FIFO

.push()(从队头)入队
.pop()(从队头)出队
.front()队头元素
.back()队尾元素

priority_queue 优先队列,可理解成一个大根二叉堆

.push()
.pop()
.top()
实现小根堆
1、
priority_queue<int,vector<int>,greater<int> > q;
2、
struct rec{int id; double val;};
bool operator <(cosnt rec &a,const rec &b){ return a.val > b.val}

deque 双端队列

头文件

#include<deque>

函数调用

[] 随机访问,与vector类似
.begin() / .end()返回deque的头/尾迭代器
.front() / .back()队头/尾元素
.push_front() / .push_back()从队头/尾入队
.pop_front() / .pop_back()从队头/尾出队
.clear()清空队列
.size() .empty() .clear() 与vector类似,前两者的复杂度为O(1);

set 集合

头文件

#include<set>

声明

set<int> s;
struct rec{...}; set<rec> s;
multiset<double> s;
与优先队列一样,用set和multiset储存的元素必须定义“小于号”运算符

迭代器

set和multiset的迭代器被称为双向访问迭代器,
不支持随机访问,支持*号解除引用,
仅支持++和--两个与算数有关的操作

函数调用

.begin() / .end()
.insert(x)把一个元素x插入到集合中,若元素已存在,不重复插入
.erase()
设it为一个迭代器,a.erase(it);代表删除it所指向的元素,O(longn)
设x为一个元素,a.erase(x);代表删除所有等于x的元素,O(logn)
.find(x)查找等于x的元素,若不存在则返回a.end(),O(logn)

与find类似,O(logn)
.lower_bound(x)查找 >= x的元素中最小的一个,并返回指向该元素的迭代器
.upper_bound(x)查找 > x的元素中最小的一个,并返回指向该元素的迭代器
.count(x)返回等于x的元素个数,O(k+logn),k为x的个数
.size() .empty() .clear() 与vector类似,前两者的复杂度为O(1);

map

map是一个键值对key-value的映射
key和value可以是任意类型,其中key必须定义小于号运算符

头文件

#include<map>

声明

std:map<key_type,value_type> name;
eg:
map<long long,bool> vis;
map<string,int> hash;
map< pair<int,int>,vector<int> > test;

迭代器

与set一样,map的迭代器也是双向访问迭代器。
对map的迭代器解除引用后,将得到一个二元组pair<key_type,value_type>

函数调用

.size() .empty() .clear() .begin() .end()
与set类似,分别为元素个数、是否为空、清空、头迭代器、尾迭代器
.insert() / .erase()
与set类似,分别为插入和删除
insert的参数为pair<key_type,value_type>
erase的参数为key或迭代器

map<int,int> h;
h.insert(make_pair(1,2));
h.insert(make_pair(2,3));
map<int,int>::iterator it = h.begin();
pair<int,int> p = *it;
h.erase(it);
h.erase(2);
cout<<p.first<<' '<<p.second<<endl;

输出结果:1 2

.find()
h.find(x);
在map h 中查找key为x的二元组,并返回指向该二元组的迭代器,若不存在则返回h.end(),O(logn)
[]
h[key]返回key映射到的value的引用,O(logn)
[]操作符是map最吸引人的地方,我们可以方便的通过h[key]来得到key对应的value
也可以通过h[key]来修改key对应的value
需要注意,若查找的key不存在,执行h[key]后h会自动新建一个二元组(key,zero)这里zero表示广义上的“零值”,如整数0、空字符串等
建议在h[key]前先用find(key)检查key的存在性

m.insert(make_pair(1,2));
m.insert(make_pair(100,99));
cout<<m[1]<<" "<<m[100]<<endl;
m[100] = 5;
m[1] = 100;
printf("%d %d %d",m[100],m[1],m[10]);

输出:2 99
5 100 0

posted on   michaele  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
 
点击右上角即可分享
微信分享提示