C++学习笔记22——关联容器之map

1,关联容器综述

关联容器和顺序容器的本质区别在于:
关联容器通过键(key)来存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。
 
可能正是因为其不是通过位置来存储的,所以关联容器不提供front、push_front 、pop_front  、back、 push_back、 pop_back等操作。
 
关联容器的key值不可修改。
 
关联容器不能通过容器大小来定义,因为系统无法给出默认的key值。
 
关联容器里的元素按照key值升序排列,而与插入元素的先后顺序无(同一键值的不同元素可能与插入的先后顺序有关)。
 

2,map综述

map类型的元素以建-值对的形似组织,通常理解为关联数组——由键而不是位置来索引元素的数组。
键必须唯一。
 
头文件:
#include <map>
using std::map;
使用红黑树实现。

3,map对象的定义

map<k, v> m;       //空对象
map<k, v> m(m2);   //m2的副本
map<k, v> m(b, e); //迭代器b、e之间元素的副本

对于键类型,唯一的约束就是必须支持“<”操作,而且是严格弱排序的,即与自身比较时肯定能得出false的结果
 
所以list的迭代器就不能用作键,因为其不支持 <  操作。(list迭代器只支持自增、自减和不等于操作,不支持关系运算操作。)
 

4,相关类型

map<k, v>::key_type       //键的类型
map<k, v>::mapped_type    //值的类型
map<k, v>::value_type     //pair类型 pair<const k, v>
 

5,添加元素

一个给定的键只能对应一个元素
(1)下标操作添加元素
下标里放的不再是位置而是键,当该键不存在时,向map中添加该键,对应的值使用值初始化。
注意:下标操作返回的是值类型,而map迭代器返回的是pair类型
 
(2)insert
m.insert(e)      //e为value_type,即pair类型,返回一个迭代器和一个bool值的pair对象
m.insert(beg,end)//beg,end为指向value_type类型对象的迭代器,只有当其key值在m中不存在时才插入,返回void
m.insert(iter,e) // 同样,e.first不在m中时才插入
 
 
例子:
map<string, int> word_count;
word_count.insert(make_pair("WHY",1312));
注意make_pair的用法。
 
关于第一个版本的insert,当插入的键已存在时,不插入,返回的bool为假
上面的例子中,insert返回的类型为:
pair<map<string, int>::iterator, bool >
 

6,查找元素

只能查找键,而不能直接查找值。
 
(1)count
返回某个键存在的次数。
对于map而言,只能是0或者1
 
(2)find
返回指向查找的键的迭代器,不存在则返回end迭代器。
可以通过判断返回的迭代器是否为end来判断查找的键是否找到
 

7,删除元素 erase

m.erase(k) //按key删除,返回size_type表示删除的元素个数,
m.erase(p) //按迭代器删除,返回void
m.erase(b,e)//删除 b、e之间的元素,b、e相等时不删除,返回void

 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值