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排序和修改方便的特性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章