十章 札记--C++ primer 之旅

两个基本的关联容器:
     map:            关联数组, 元素通过键来存储和读取
     set:              集合, 
     multimap:     同一个键可多次出现的map
     multiset:       同一个键可多次出现的set


pair类型 : 头文件  utility 

map 类型: 头文件 map
构造函数:
     map<k,v> m;     
     map<k,v>m(m2);     创建m2的副本
     map<k,v> m(b,e);    存储迭代器b 和 e 标志的范围内的元素的副本。元素的类型必须能转换成pair<const k,v>


键类型的约束:
     关联容器中,键不但有一个类型,还有一个相关的比较函数。
     唯一的约束是必须支持< 操作符,支持其他的关系或相等运算,不做要求

map 定义的类型:
     map<K,V>::key_type           map容器中,用作索引的键的类型
     map<K,V>::mapped_type    map容器中,键所关联的值的类型
     map<K,V>::value_type        pair 类型,     first 元素具有 const map<K,V>::key_type 类型 ;second 元素具有map<K,V>::mapped_type 类型
     
注意:value_type 是pair 类型,它的值成员可以修改,但键成员不可以。

map迭代器 解引用 是 pair 类型的对象


給map 添加元素:
     
1、使用下标访问map对象。
     注意:用下标访问不存在的元素会导致在map容器中添加一个新的元素,键为下标值。

     下标操作符返回的值 与 对 map迭代器进行解引用获得的类型不用。
区别:
      map 迭代器返回的是: value_type类型,即  pair<const key_type, mapped_type>
      下标操作符: mapped_type 类型


map::insert 
     1)m.insert(e): e 的类型是 在m上的value_type 类型。
                              键(e.first) 不在m中: 插入值为 e.second 的新元素
                              键(e.first) 已在m中: 保持m不变
                              返回值: 一个pair类型。 <指向键为e.first的元素的迭代器, bool类型>
                              m中是否存在 键 e.first 返回值的区别:不在的话 返回值pair 里面的bool为假,否则为真

                              EX: map<string, int> word_count;
                                      word_count.insert( map<string,int>::value_type("Anna",1));
                                      简化的:    
                                       word_count.insert( make_pair("Anna",1) );
                                       typedef map<string,int>::value_type  valType
                                       word_count.insert( valType("Anna",1));
                                     上面的插入返回的pair 类型如下:
                                        pair< map<string,int>::iterator, bool> 

     2)m.insert(beg,end);  插入beg 和 end 范围内的元素的副本, 类型必须是m.value_type。
                                        返回void     

     3)m.insert(iter,e)       跟第一个插入方式一样,iter 的作用不是很明白。


查找并读取map 的元素:
     m.count(k)           返回m中k的出现次数
     m.find(k)             如果存在k索引的元素,返回指向该元素的迭代器。否则,返回超出末端迭代器。


map 中删除元素:
     m.erase(k)           删除m中 键为 k 的元素。返回删除的元素个数,类型:size_type
     m.erase(p)          删除 迭代器p指向的元素,返回void
     m.erase(b,e)        删除 b e之间的元素副本,返回void

再次记住: const string &  可以用实参string 或 c_str  c 风格字符串 传递参数。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值