关于STL的map用法总结

map 容器是关联式容器的一种,存储的都是pair 类模板创建的键值对;键值对,其中第一个元素作为键(key),第二个元素作为值(value)。

在使用 map 容器存储多个键值对时,该容器会自动根据各键值对的键的大小,按照既定的规则进行排序。
默认情况下,map 容器选用std::less排序规则(其中 T 表示键的数据类型)是做升序排序

使用 map 容器存储的各个键值对,键的值既不能重复也不能被修改。

map的迭代器:C++ STL 标准库为 map 容器配备的是双向迭代器(bidirectional iterator)。这意味着,map 容器迭代器只能进行 ++p、p++、–p、p–、*p 操作,并且迭代器之间只能使用 == 或者 != 运算符进行比较。

较常用的迭代器有:begin(), end(), find(key), lower_bound(key), upper_bound(key)等。
注意:find() 能帮我们查找指定 key 值的键值对,如果成功找到,则返回一个指向该键值对的双向迭代器;反之,其功能和 end() 方法相同。

关于map的查找方法:
1、重载运算符【】:
如果查找的键值对存在,借助重载的 [ ] 运算符才能成功获取该键对应的值;
如果不存在,则为向该 map 容器中增添一个键值对,值的数据类型,如果是基本数据类型(int/double/longlong),则值为 0;如果是 string 类型,其值为 “”,即空字符串(即使用该类型的默认值作为键值对的值)
2、at()函数
at() 成员方法也需要根据指定的键,才能从容器中找到该键对应的值
不同之处在于,如果在当前容器中查找失败,该方法不会向容器中添加新的键值对,而是直接抛出 out_of_range 异常。
3、如果以上方法都不适用,我们还可以遍历整个 map 容器,找到包含指定键的键值对,进而获取该键对应的值,例如:

    for (auto iter = myMap.begin(); iter != myMap.end(); ++iter) {
        //调用 string 类的 compare() 方法,找到一个键和指定字符串相同的键值对
        if (!iter->first.compare("C语言教程")) {
            cout << iter->first << " " << iter->second << endl;
        }
    }
    return 0;

关于map的插入数据方法:
1、重载运算符【】:如果键值在已有的map里不存在,则为向该 map 容器中增添一个键值对,值的数据类型,如果是基本数据类型(int/double/longlong),则值为 0;如果是 string 类型,其值为 “”,即空字符串(即使用该类型的默认值作为键值对的值)
2、用insect()函数:返回的是一个pair,其中 pair.first 表示一个迭代器,pair.second 为一个 bool 类型变量(不过插入的时候可以不管返回值)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值