关联容器的操作
除了和顺序容器定义的类型之外,关联容器还定义了一下几种类型:
key_type | 此容器类型的关键字类型 |
mapped_type | 每个关键字关联的类型,只 适用于map |
value_type | 对于set,与key_type相同 对于map,为pair<const key_type, mapped_type> |
关联容器的迭代器
当解引用一个关联容器迭代器时,会获得一个类型为value_type的值的引用。对于map而言,value_type是一个pair,期first成员保存const关键字,second保存值
auto map_it = words.begin();
map_it->first = "new key"; // 错误:关键字是const的
++map->second;
一个map的value_type是一个pair,我们可以pair的值,但不能改变pair的关键字。
set的迭代器时const的:虽然set定义了iterator和const_iterator类型,但是两种类型都只允许只读set的元素,与不能改变map元素的关键字一样,set的关键字也是const的。
- 关联容器和算法
我们通常不对关联容器使用泛型算法,因为set的关键字是const的,而map的元素pair的第一个成员也是const的。因此不能将关联容器传递给修改或重排元素的算法。
实际编程中,如果我们对一个关联容器使用泛型算法,要么把它当做一个源序列,要么当做一个目的位置。例如可以用copy算法将元素从一个关联容器拷贝到另一个序列,类似的,还可以调用inserter将一个插入器绑定到一个关联容器。