简单介绍一些关于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为空则返回true
NO.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 #include <iostream> 2 #include <queue> 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<Node,vector<Node>,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<<q.top().x<<' '<<q.top().y<<endl; 22 q.pop(); 23 } 24 return 0; 25 }
代码二
1 #include <iostream> 2 #include <queue> 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<Node>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<<q.top().x <<' '<<q.top().y<<endl; 20 q.pop(); 21 } 22 return 0; 23 }
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);中间分别为两个类型。