您的位置:首页 > 其它

标准模板库(STL)之 map 列传 (二)

2016-02-29 21:21 309 查看
标准模板库(STL)之 map 列传

map 容器的遍历

修改 key or value

实用的成员函数

下标 vs at

map 容器的遍历

使用 range-based for 循环访问 map 元素(C++11之后方支持)

std::map<std::string, float> coll;
...
for (auto elem&: coll)
std::cout << "key: " << elem.first << "\t"
<< "value: " << elem.second << std::endl;


其中 elem 是个 reference,指向“容器 coll 中目前正被处理的元素”,因此 elem 的类型是
pair<const std::string, float>
。表达式
elem.first
取得元素的
key
,表达式
elem.second
自然取得元素的 value。

以迭代器访问元素(C++11之前必须使用这种方法)

std::map<std::string, float>::iterator pos;
for (pos = coll.begin(); pos != coll.end(); ++pos)
std::cout << "key: " << pos->first << "\t" << "value: " << pos->second << std::endl;


修改 key or value?

如果你尝试改变元素的 key,会在编译器即引发错误:

elem.first = "hello";           // ERROR at compile time
pos->first = "hello";           // ERROR at compile time


不过如果 value 本身的类型并非 const,修改其值自然没有问题:

elem.second = 13.5;
pos->second = 13.5;


实用的成员函数

(1)c.count(val):返回”key 为 val”的元素的个数

(2)c.find(val):最终取返回迭代器 ite 的 second 成员变量

下标 vs at

(1)c[key]:返回 key 对应的value,如果存在于该容器;安装这一key value 对,如果尚未存在于容器内;

(2)c.at(key):返回 key 对应的 value,如果不存在于容器中,则会抛异常;如下图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: