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

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

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,如果不存在于容器中,则会抛异常;如下图:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值