关联容器

原创 2013年12月03日 20:15:21

        关联容器支持通过键来高效地查找和读取元素,放入关联容器中的元素,按照键的大小来排列,c++标准库支持两个基本的关联容器类型:map和set。map是键-值对的集合,通常可以理解为关联数组,使用map对象时,必须包含map头文件。set是单纯的键的集合,它支持map大部分操作,使用set容器时,必须包含set头文件。关联容器的类型包括map、set、multimap、multiset。


        pair类型:定义在utility头文件中,是由两个元素组成的数据结构,通常可以用在map容器中

                          pair<T1, T2> p1;                                //创建一个空的pair对象

                          pair<T1, T2> p1(v1, v2);                    //创建一个pair对象,两个元素的值为v1, v2

                          make_pair(v1, v2);                             //以v1, v2生成一个新的pair对象

                          p1 < p2、p1 == p2

                          p.first、p.second                                //返回first、second共有的数据成员


        map类型

                定义:

                                map<k, v> m;

                                map<k, v> m(m2);

                                map<k, v> m(b, e);

                                注:键类型的约束,键不但要有一个类型,而且还有一个相关的比较函数,默认情况下,标

                                       准库使用键类型数据上的“小于”关系。                         

                map定义的类型:

                                map<k, v>::key_type                          //索引的键的类型

                                map<k, v>::mapped_type                  //键所关联的值的类型

                                map<k, v>::value_type                       //一个pair类型,与make_pair有相同的作用

                

                添加元素:

                                使用insert成员实现

                                         m.insert(e);                                                           //返回一个pair对象

                                         m.insert(beg, end);

                                         m.insert(iter, e); 

                                使用下标操作符获取元素,然后给获取元素赋值             //下标操作符返回左值,如果下标所

                                                                                                                     表示的键不在容器中,则添加新元素

                查找元素:

                                当使用下标操作符查找不到元素时,map会自动添加该元素,所以我们不能用下标操作符进

                               行查找,c++标准库提供了count和find两个函数进行查找,对于map对象,count成员的返回

                               值只能是0或1,而find的返回值是一个迭代器。

                                m.count(k);

                                m.find(k);                                        //如果找不到则返回m.end()

                删除元素:

                                m.erase(k);                                    //返回删除元素个数

                                m.erase(p);                                    //返回void

                                m.erase(b, e);                                //返回void

                迭代遍历:                                                    //与顺序容器相同

        multimap:                                                      

                mutimap允许一个键对应多个实例,所以multimap不支持下标运算,它的使用方法与map基本相同,使

                用时需要引用map头文件。

                不同的迭代方案:

                                m.lower_bound(k);                       //返回迭代器,指向键不小于K的第一个元素

                                m.upper_bound(k);                      //返回迭代器,指向键不大于K的第一个元素

                                m.equal_range(k);                       //返回迭代器的pair对象,它的first成员等价与

                                                                                      m.lower_bound(k)

        set类型

                set容器是单纯的键的集合,它支持大部分的map操作,set不支持下标操作符,而且没有定义

                mapped_type类型,在set容器中,value_type与key_type类型相同,并且键为const类型,不

                以修改,如果某个集合需要按顺序存储,并且要保证不重复出现任何元素,可以考虑使用此类型。

                添加元素:

                               s.insert(k);                                    

                               s.insert(beg, end);                           //返回pair类型,包含一个迭代器和一个bool类型,bool

                                                                                        代表是否添加了元素

               其他操作:                                                       //同map

        multiset:                                                      

                multiset允许一个键对应多个实例,它的使用方法与set基本相同,使用时需要引用set头文件


相关文章推荐

STL关联容器入门

  • 2012年02月10日 18:12
  • 179KB
  • 下载

用关联容器生成交叉列表

  • 2013年04月09日 15:21
  • 1KB
  • 下载

Mybatis3源码分析(二):扫描Mapper关联到spring IOC容器

首先讲讲mapper是怎么从配置到对象的。         实现了basePackage下所有实现了markerInterface指明的类...

关联容器的简单应用

  • 2017年11月21日 18:36
  • 4KB
  • 下载

C++关联容器学习总结

  • 2011年10月30日 21:28
  • 39KB
  • 下载

C++ STL关联容器 set和map学习笔记

C++ STL关联容器 set和map学习笔记 STL提供了4种关联容器:set、multiset、map和multimap。前两种在头文件#include,后两种在头文件#include中定义的。 ...

C++关联容器 map用法

原创作品 转载请注明出处 http://blog.csdn.net/always2015/article/details/44980187关联容器关联容器和顺序容器有着根本的不同:关联容器中...

Part3:关联容器(二)&Part4:迭代器

Rule4:当关乎效率时应该在map::operator[]和map-insert之间仔细选择 map[key] = value;这是一种简要的写法,这个操作是,如果key值不存在,插入这样一个键值对...
  • cshilin
  • cshilin
  • 2016年07月16日 16:13
  • 3978

STL源码剖析——关联容器之hash_map

前言

Part3:关联容器(一)

Rule20:为指针的关联容器指定比较类型 有如下情况,有一个string*指针的set,你把一些动物的名字插入set:set ssp; ssp.insert(new string("Anteate...
  • cshilin
  • cshilin
  • 2016年07月16日 12:51
  • 5935
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关联容器
举报原因:
原因补充:

(最多只允许输入30个字)