首页 > 代码库 > C++STL之关联容器【map】【set】
C++STL之关联容器【map】【set】
map以键-值対的形式组织,键的作用在于索引,而值表示所存储和读取数据。
set仅包含一个键,并且有效的支持某个键是否存在的查询。
他们都是基于标准型类库pair实现,该类型在utility头文件中。
一:关于pair类型的操作
pair<T1,T2> p1; //创建一个空pair类型
pair<T1,T2> p1(v1,v2); //创建并初始化
make_pair(v1,v2) //生成pair对象
<,>,==,!= //类型之间比较,遵循字典序,先比较first后second
p.first() //返回first成员,
p.second() //返回second成员
同时还支持一些容器的基本操作
#include <vector> #include <cstdio> #include <cstring> #include <algorithm> #include <stack> #include <utility> #include <string> #include <map> #include <iostream> using namespace std; int main() { pair<int,int> p; p = make_pair(1,2) ; pair<int,string> p1(1,"sttttaa"); string y;int x; pair<string,vector<int> > line; cout<<p1.first<<" "<<p1.second<<endl; while(cin>>x>>y) { p1=make_pair(x,y); } return 0; }
二:map容器及set容器
1:构造函数及其定义的类型
map<k,v> m; 定义空的map
map<k,v> m(m2); 定义map初始化为m的副本
map<k,v> m(b,e); 定义map初始化为一个迭代器b到e的副本
返回类型
map<k,v>::key_type; 键的类型
map<k,v>::mapped_type; 值的类型
map<k,v>::value_type; 一个pair类型
2:常用操作
支持insert的三种常用插入元素,先查找,不在的话插入
支持直接下标操作元素
m.count(v); 返回键v在m中的值的个数
m.find(v); 返回一个迭代器,如果存在返回位置,否则指向尾
支持erase三种常用删除操作
支持容器常用遍历
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <map> #include <cmath> #include <map> #include <utility> #include <set> using namespace std; #define Del(a,b) memset(a,b,sizeof(a)) int main() { map<string,int> m; //创建 m["yangdangl"]=5;//插入 m.insert(map<string,int>::value_type("Ann",1)); m["jame"]=6,m["wade"]=3; pair<string,int> p("james",6); string s="dasds";int t=200; p = make_pair(s,t); map<string,int>::iterator it; for(it=m.begin();it!=m.end();it++) //遍历 { cout<<it->first<<" "<<it->second<<endl; }//查找 cout<<m.count("jame")<<endl; it=m.find("yangdnagl"); if(it!=m.end()) cout<<it->second<<endl; m.erase("wade");m.erase(m.begin()); for(it=m.begin();it!=m.end();it++) //遍历 { cout<<it->first<<" "<<it->second<<endl; } m.erase(m.begin(),m.end()); m.clear(); return 0; }
三:multimap和multiset
多重映射容器,即一个键可以对应多个值
其支持map和set的大多数操作,但是都不支持下标操作。
由于multimap中可能存在一个键对应多个值,而这多个值是相邻存放的,那么我们查找的时候可能需要查找到一个范围,这里介绍三个函数。
m.lower_bound(k); 返回一个迭代器,指向不小于的第一个元素
m.upper_bound(k); 返回一个迭代器,指向大于k的第一个元素
m.equal_range(); 返回一个pair类型,第一个值为lower_bound()结果,第二个为upper_bound()结果。