关闭

关联容器

标签: mapset关联容器pair类型
483人阅读 评论(0) 收藏 举报
分类:

        关联容器支持通过键来高效地查找和读取元素,放入关联容器中的元素,按照键的大小来排列,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头文件


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:14427次
    • 积分:398
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:6篇
    • 译文:0篇
    • 评论:4条
    最新评论