map

index > STL > map


细致的介绍还是前人做的好,我自愧不如。

https://blog.csdn.net/fhb1922702569/article/details/80984774

https://blog.csdn.net/sevenjoin/article/details/81943864

关于比较

列几点我常忽视的细节:

  1. mp.insert()函数插入已有key的数据时,不能插入数据。而mp[key]引用可改写key对应的value。
  2. map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。(面试可能也会见到相关的提问)

部分应用

离散化

单纯利用一一对应的特性。

打标记

虽然说用 [] 很方便,但是如果就是二元的标记,还是巧用insert/erase/find/count 比较稳妥。(原因有待解释,可能打脸)

特殊二叉搜索树(类红黑树)

——“你其实有一棵随叫随到的红黑树。”

须知:

  • map是有序容器。

  • mp.begin() 可访问第一个键值对(最值)。

  • mp[key] 修改某个key的权值,而且改完保持有序。

  • mp.insert() mp.erase() mp.find() 增删改查都有。

  • 甚至还能自行 mp.lower_bound() mp.upper_bound()

  • 默认lesser<int>升序,想要降序也可以(如果不是原生类型得另外写比较类):

  • map<int, int, greater<int> > cnts;
    

有了上面这些领悟,你这可以解决某些特定的情况:

比如有一群人,每个人的分数不同,找一下最高分的人有几个。

或者,要输出,第一/第二/第三的分数,和对应的人数。

如果嫌简单,再难一点,修改m次分数,每次修改就再求一次答案。

1e6的人数,1e9的分数,可有负分,修改/询问1e6。

可能以上这个题目比较拙劣,如果以后有更好的会再放进来。简单地说,充分利用key排序和修改方便的特性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值