关联容器

原创 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头文件


顺序容器和关联容器的比较

1、关于什么是容器,以及容器的分类,下面这两篇博客讲得比较清楚,可以参考一下: (1) C++顺序性容器、关联性容器与容器适配器 (2) C++容器:顺序容器,关联容器 2、关于顺序容器和关联容器...
  • JIEJINQUANIL
  • JIEJINQUANIL
  • 2016年04月17日 21:55
  • 1512

关联容器的细节以及使用要点

和顺序容器不同,关联容器是通过键值对的方式存储数据的,可以通过键来读取数据。C++中主要的关联容器是map和set两种,它们都只能为一个键添加一个值,如果希望添加多个值,应该使用multimap和mu...
  • qq_25722767
  • qq_25722767
  • 2016年08月25日 11:46
  • 381

STL之顺序容器和关联容器总结

顺序容器          Vector中所采用的数据结构非常简单:线性连续空间。当分配空间被占满而仍然需要添加元素时,vector便会进行一场空间重新配置的大工程!在这里,程序员需要注意的是,一旦...
  • lhc548453346
  • lhc548453346
  • 2016年03月07日 21:02
  • 885

c++关联容器总结

关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的。与之相对,顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。 关联容器支持高效的关键字查找与访问。两个主要的关联容...
  • fengxinlinux
  • fengxinlinux
  • 2017年06月25日 16:49
  • 1643

C++学习笔记--关联容器

C++标准库提供8个关联容器:map、multimap、unordered_map、unordered_multimap、set、multiset、unordered_set、unordered_mu...
  • du_qi
  • du_qi
  • 2016年08月15日 17:42
  • 550

c++ 关联容器

c++ 第十一章:关联容器 2:在c++中,顺序容器和关联容器之间本质的区别在于:关键字,关联容器中的元素是按照关键字来保存的,顺序容器中的元素是按照它们在容器中的位置来保存的。3:我们可以按照关键...
  • yangbodong22011
  • yangbodong22011
  • 2016年02月25日 19:10
  • 519

C++ Primer : 第十一章 : 关联容器之关联容器的迭代器和操作

关联容器的迭代器和操作
  • JY_95
  • JY_95
  • 2015年08月20日 10:38
  • 738

[C++]高效使用关联容器的一些建议

关联容器 本文介绍在关联容器中常见的一些的问题以及提升使用关联容器的建议。 1. 理解相等(equality)和等价(equivalence)的区别。 相等是以operator==为基础的。等...
  • stary_yan
  • stary_yan
  • 2016年07月16日 17:57
  • 1311

C++关联容器 map用法

原创作品 转载请注明出处 http://blog.csdn.net/always2015/article/details/44980187关联容器关联容器和顺序容器有着根本的不同:关联容器中...
  • Always2015
  • Always2015
  • 2015年04月10日 15:21
  • 1433

STL 顺序容器,关联容器

向量 vector :   是一个线性顺序结构。相当于数组,但其大小可以不预先指定,并且自动扩展。它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组。 在创建一个ve...
  • gavin0123
  • gavin0123
  • 2014年08月18日 15:12
  • 1158
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关联容器
举报原因:
原因补充:

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