一、关联容器迭代器
当解引用一个关联容器迭代器时,会得到一个类型为容器的value_type的值的引用
对于set而言,虽然set类型同时定义了iterator和const_iterator类型,但都只允许访问set中的元素
对于map而言,会得到一个pair类型,first是关键字,second是值
二、添加元素
1、insert和emplace操作
//c是关联容器
c.insert(v) //v是value_type类型的对象
c.emplace(args) //args用来构造一个value_type类型的对象
此函数对于map和set返回一个pair,first是一个迭代器,指向具有指定关键字的元素(新插入或已经存在),second是一个指示插入是否成功的bool值(若已有该值则是false);对于multimap和multiset返回一个指向新元素的迭代器
c.insert(p,v) //类似insert(v),迭代器p指出从哪里开始搜索新元素应该存储的位置
c.emplace(p,args)
返回一个迭代器,指向具有给定关键字的元素
c.insert(b,e) //b,e是迭代器,表示一个c::value_type类型值的范围
c.insert(il) //il代表花括号列表,花括号里是一个pair
返回void
2、map添加pair元素有以下方法
// 向word_count插入word的4种方法
c.insert({word, 1});
c.insert(make_pair(word, 1));
c.insert(pair<string, size_t>(word, 1));
c.insert(map<string, size_t>::value_type(word, 1));
三、删除元素
1、两个版本的erase与之前相似,参数分别是一个迭代器或者一个迭代器对,来删除一个元素或者是一个范围内元素
2、关联容器提供一个额外的erase操作,他接受一个key_type参数,此版本删除所有匹配给定关键字的元素,返回实际删除的元素的数量(对于不重复关键字的容器,总是返回1或0)
四、map的下标操作
1、对于map和unordered_map容器(其他关联容器不支持)提供了下标运算符和at函数
2、map的下标运算符接受一个索引(即关键字),获取与此关键字相关联的值,与其他下标运算符不同的是,如果关键字不在map中,会为它创建一个元素并且插入到map中(一旦使用[]就会有),关联值将值进行值初始化
由于下标运算符可能插入一个新元素,我们只可以对值为非const的map使用下标操作
当我们只想知道一个元素是否存在在map中,并不想添加元素时就不能使用下标运算符
3、map的at成员带参数检查,如果关键字不再map中,会抛出out_of_range异常
五、访问元素
1、find函数用于确定是否在容器中,count函数确定存在个数
c.find(k) //返回一个迭代器,指向第一个关键字为k的元素,若不存在返回尾后迭代器
c.count(k) //返回关键字为k的元素的数量,对于不重复关键字的容器返回值为0或1
2、 查找函数
c.lower_bound(k) //返回一个迭代器,指向第一个关键字不小于k的元素
c.upper_bound(k) //返回一个迭代器,指向第一个关键字大于k的元素
c.equal_range(k)
//返回成员为迭代器的pair,表示关键字等于k的元素的范围,若k不存在,pair的成员均等于c.end()
3、对于不支持随机访问的迭代器如set、map这种的迭代器,是不支持迭代器相减的