音乐播放器
Ericam_blog
 
Powered by Gridea | Theme: Fog
载入天数...
载入时分秒...
总访问量:  |   访问人数:

C++ STL快速使用手册

  热度: loading...

整理c++常用STL,方便查询使用
 
 

map / unordered_map

 
map可以构造字典(key,value),底层维护的是一个红黑树。
 
用途:键值-映射【默认会按照键对其中的元素进行排序】
 

//map<type1,type2>m 例如:
map<int ,string> m;

插入元素

   1.m.insert(pair<int,string>(102,"aclive"));
   2.m[112]="April";//map中最简单最常用的插入添加!

常用方法:

  • mp.clear() 无返回值,清空mp
     
  • mp.count(key) 返回的是被查找键 是否存在,存在返回1
     
  • mp.find(key) 返回的是被查找元素的位置,没有则返回map.end()
     
  • mp.begin() 返回mp首元素的位置
     
  • mp.end()
     
     

对map中元素进行访问的方法(需要借助迭代器):

//map<type1,type2>it 例如:
map<int ,string>::iterator it;
for(it=mp.begin();it!=mp.end();it++)
	cout << it->first << it->second;

 
** ps: unordered_map与map类似,只是其底层维护的是一个哈希表,不会对元素进行排序 运行速度比map快,针对大数据推荐使用**

set

 
 
集合,set中每个元素的值都唯一,系统能根据元素的值自动进行排序。

底层依然是红黑树,支持高效的增删改查操作。
 
 

//声明
set<type>s

 
 
常用方法:

  • s.clear()
     
  • s.size() 获取集合大小
     
  • s.insert(v)
     
  • s.erase(v)
     
  • s.find(v) 在set中查找元素v,返回一个迭代器
     
  • s.begin()
     
  • s.end()
     
     

对set中的元素进行访问需要利用 迭代器

 

stack<int> mystack;

 
常用操作:

  • s.push(a)
     
  • s.pop()
     
  • s.top()
     
  • s.empty()
     
  • s.size()
     

队列

 
常用方法:

  • q.push(a)
     
  • q.pop()
     
  • q.size()
     
  • q.empty()
     
  • q.front()
     
  • q.back()
     
     

优先队列

 
默认大根堆,优先级最高的元素先出队列
 

//以int类型举例
priority_queue<int>q

 
小根堆

priority_queue<int,vector<int>,greater<int>>q

 
自定义数据类型
 

struct Node{//默认优先级 a由小到大 b由大到小
    int a,b;
    bool operator < (const Node & rs) const {
        if(a==rs.a) return b > rs.b;
        return a < rs.a;
    }
}
……
……
Node d[2]={{1,1},{1,2}};
sort(d,d+2);

 

vector

 
常用操作:

  • v.clear()
     
  • v.push_back(a) 末尾添加元素
     
  • v.pop_back(a) 末尾删除元素
     
  • v.size()
     

其他操作:

  • v.empty()
     
  • v.erase(v.begin()+1,v.begin()+3) 删除第1,2个元素 【左闭右开 [1,3) 】
     
  • v.insert(v.begin()+1,5) 插入元素5在v[1]位置
     
  • v.insert(v.begin()+1,3,5) 从v[1]位置开始插入3个5
     
  • a.swap(b) b为向量,将a和b中元素进行整体性互换
     

判断条件删除vector中元素
 

for(vector<int>::iterator it=v.begin(); it!=v.end(); )
{
     if(...)
          it= v.erase(it);
      else
            it ++ ;
}

string

 
常用方法:

  • s.length() / s.size() 返回字符串长度
     
  • s.substr(pos) 从s的第pos个位置取到末尾 的子串
     
  • s.substr(pos,len) 从s的第pos个位置取出长度为len的子串
     
  • s.find(" ",pos ) 从s的第pos个位置开始寻找,返回查找到的位置,查找不到返回-1
    翻转字符串
    reverse(s.begin(),s.end())

char * 与string相互转换:

char*s1 = s.c_str();   //string转化为char*类型
string s = string(s1) //char*转化为string类型

sort函数

 

//对静态数组存储的基本类型元素排序
int a[N];
sort(a,a+N);   //对a数组的0~N-1号元素从小到大排序

 
自定义优先级排序规则 (主要应用于结构体)

int cmp(int a,int b)
{
    return a>b;
}

//结构体
struct people{
    int num;
}
int cmp(people a,people b)
{
    return a.num < b.num;
}

//调用
sort(m,m+N,cmp);