STL

简单介绍一些关于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);中间分别为两个类型。

原文地址:https://www.cnblogs.com/fengzhiyuan/p/6985372.html