C++之STL中常用关联容器使用方法
2017-02-25 01:03
316 查看
在STL中常用的关联容器有set和map,其他multiset和multimap是这两个容器的扩展,区别就是打破了键值得唯一性,而在set和map中键值是唯一的,即使插入两个相同键的数据,在容器中也只保留一个。set容器内部只有键值而没有实值(我也不知道为什么还能称之为关联容器),而map里存放着元素是pair<T1,T2>对象。 set和map内部都实现了红黑树的结构就是平衡搜索树。所以它的优势是快速的插入删除、以及查找,其时间复杂度是log2N。
一. set
1.创建对象
set<T1> s; //对于不是自己定义的数据类型,像int,double等可以不定义比较方式。 set<T,CmpStruct> s; //自定义比较结构体 set<T,DefineStruct> s; //自定义数据类型
//不是自定义的数据类型 ,定义比较结构就行,内部重载() //注意不是只定义比较函数,因为set参数是结构体类型 struct CmpStruct { //重载()操作符,结构名+括号就成了函数的形式,好有趣 bool operator()(const T1 a, const T2 b) { return a<b;//从小到大 } } //对于自定义的数据类型 ,内部要重载<运算符 struct DefineStruct { int id; string name; bool operator<(const DefineStruct &a) { return this->id < a.id; } }
2.插入删除
insert(key):容器内部会根据红黑树的结构插入到相应位置。 erase(key):删除相应键值。
3.遍历
由于内部结构直接遍历(中序遍历)出的就是排序好的数据,这里遍历不像vector,只能使用迭代器。
4.查找
find(key):返回相应地址位置,iterator类型。如果找不到,返回值为s.end()。
set<T> s::iterator it = s.find(key); if(it != s.end()) cout<<"找到了"; else cout<<"没找到";
二. map
map的操作和set基本一样,优势同样是快速插入删除,查找。
创建对象时要自定义比较函数的同set
1.插入
insert(pair<T1,T2>(a,b))插入pair对象 map重载了[]操作符,m[key]=new_value;可以实现修改实值得功能,当key不存在与map中时,会创建key并初始化为new_value; []还可以用于访问元素,像数组一样。
2.删除
通过key删除数据
erase(key)
3,查找和set也是一样的
相关文章推荐
- C++ STL入门教程(1) vector向量容器使用方法
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- C++ STL容器的使用方法(vector、queue、list、set、map)
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- c++ STL常用算法使用方法
- 【C++】STL常用容器总结之七:对组pair与关联容器
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- 【STL容器学习】-关联容器与map的使用方法
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- 几个常见stl容器的常用功能及使用方法
- STL 之 C++ Map容器的简单使用方法
- vector容器类的使用[c++ stl]
- C++STL容器使用经验总结
- Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与LinkedHashSet类))
- C++ 标准模板库STL multimap 使用方法与应用介绍(一)
- C++ 标准模板库STL 双向链表 list 使用方法与应用介绍(一)
- C++ STL 里面在容器的使用基础
- 使用STL的经验总结_指定关联容器的比较类型_12
- C++ STL--stack/queue 的使用方法
- 【STL】常用容器的方法