简单介绍一些关于c++STL
NO.1 map
1 头文件,定义
#include <map>定义 map<A,B> fzy;
定义了A,B的一个map fzy;及标号是A类型,内容是B类型
2 查找
map<A,B>::iterator zhi;
定义了一个指针zhi
for (zhi=fzy.begin();zhi!=fzy.end();++zhi) {}
3 基本函数begin() 返回指向map头部的迭代器
clear() 删除所有元素 count() 返回指定元素出现的次数 empty() 如果map为空则返回trueNO.2 vector
1 头文件,定义
#include<vector>
vector<A> fzy; 定义了一个为A类型的名字为fzy的vector
vector是动态数组。
2 使用迭代器
vector<A>::iterator zhi;
for (zhi=fzy.begin();zhi!=fzy.end();++zhi) {}
3 插入删除
fzy.insert(fzy.begin()+i,a);在第i+1个元素前面插入a;
fzy.erase(fzy.begin()+2);删除第3个元素
4 基本函数
1.push_back 在数组的最后添加一个数据
2.pop_back 去掉数组的最后一个数据 3.begin 得到数组头的指针 4.end 得到数组的最后一个单元+1的指针 5.erase 删除指针指向的数据项 6.clear 清空当前的vector 7.empty 判断vector是否为空5 排序
使用sort排序:需要头文件#include<algorithm>,
sort(fzy.begin(),fzy.end());(默认是按升序排列,即从小到大).
NO.3 set
1 头文件,定义
#include<set>
set<A> fzy;定义了一个A类型的set fzy
2 使用迭代器
set<int>::iterator zhi;
for(zhi=fzy.begin();zhi!=fzy.rend();zhi++)3 元素插入,删除
元素插入:insert()
元素删除:与插入一样,可以高效的删除,并自动调整使红黑树平衡。
set<int> s; s.erase(2); //删除键值为2的元素4 元素检索
find(),若找到,返回该键值迭代器的位置,否则,返回最后一个元素后面一个位置。
set<int> s;set<int>::iterator it;
it=s.find(5); //查找键值为5的元素 if(it!=s.end()) //找到 else //未找到5 基本函数
1. begin()--返回指向第一个元素的迭代器
2. end()--返回指向最后一个元素的迭代器
3. clear()--清除所有元素
4. count()--返回某个值元素的个数
5. empty()--如果集合为空,返回true
6. erase()--删除集合中的元素
7. insert()--在集合中插入元素
8. lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器
NO.4 priority queue
1 头文件,定义
#include<vector>
priority_queue 对于基本类型的使用方法相对简单。他的模板声明带有三个参数,priority_queue<Type, Container, Functional>
Type 为数据类型, Container 为保存数据的容器,Functional 为元素比较方式。2 插入,删除
pop 弹出优先队列中第一个元素
top 返回优先队列中第一个元素
push 在尾部插入一个元素
3 简单堆
priority_queue<int> 大根堆
priority_queue<int,vector<int>,greater<int> > 小根堆
4 operator定义
代码一
1 #include2 #include 3 using namespace std; 4 struct Node{ 5 int x, y; 6 }node; 7 struct cmp{ 8 bool operator()(Node a,Node b){ 9 if(a.x==b.x) return a.y>b.y; 10 return a.x>b.x;} 11 }; 12 13 int main(){ 14 priority_queue ,cmp>q; 15 for(int i=0;i<10;i++){ 16 node.x=i; 17 node.y=10-i/2; 18 q.push(node); 19 } 20 while(!q.empty()){ 21 cout< <<' '< <
代码二
1 #include2 #include 3 using namespace std; 4 struct Node{ 5 int x, y; 6 }node; 7 bool operator<( Node a, Node b){ 8 if(a.x==b.x) return a.y>b.y; 9 return a.x>b.x; 10 } 11 int main(){ 12 priority_queue q; 13 for(int i=0;i<10;i++){ 14 node.x=i; 15 node.y=10-i/2; 16 q.push(node); 17 } 18 while(!q.empty()){ 19 cout< <<' '< <
5 基本函数
empty()
push()
top()
pop()
NO.5 pair
1.头文件,定义
无需头文件,因为在声明std中已经包涵。定义,pair<int,int> a;这样既可,也可以直接初始化pair<string, string> a("James", "Joy");这样子的。
2.操作
对于pair类,由于它只有两个元素,分别名为first和second,因此直接使用普通的点操作符即可访问其成员
生成pair make_pair(A,B);中间分别为两个类型。