C map對映的使用方法

2021-08-04 09:15:15 字數 1516 閱讀 3212

****c++map對映的使用方法

今天考試做了道題,用上了map,這是一道提高組聯賽難度的題目,先發題目:

1. a-b problem

( dec.c/cpp/pas) .

description

大家都非常熟悉 a+b problem! 題目看多了也有審美疲勞,於是我捨棄了,改用 a-b problem! 題目是這樣的:給出一串數以及乙個數字 c,要求計算出所有 a-b=c 的數對 的個數。( 注意: 不同位置的數字一樣的數對算不同的數對)

input format

第一行包括 2 個非負整數 n 和 c,中間用空格隔開。 第二行有 n 個整數,中間用空格隔開,作為要求處理的那串數。

output format

輸出一行,表示該串數中包含的所有滿足 a-b=c 的數對的個數。

sample input

4 1

1 1 2 3

sample output

3 data limit

對於 50%的資料, n <= 2000; 對於 100%的資料, n <= 200000。

看到這題,第一反應就是用桶,多方便啊。可是看到這裡的資料規定:長整型……相信不會再有人用普通的陣列來做桶了。

這裡我機智地用到了一種物件:map。

map,將鍵對映到值的物件。

比如你需要把日期轉為數字,比如把」7月30日」轉換為730,怎麼轉換呢?

別的麻煩辦法我就不說了,說下map怎麼實現:

先定義乙個map:

map

#include 

#include

using

namespace

std;

mapdate;

int main()

沒錯就是這麼愉快與簡單就完事了。

明白了map的用法我們回到題目。

咱們定義乙個map桶:

map

#include 

#include

using

namespace

std;

map m;//咱們的map桶

int n;

long c,num[200005];

int main()

i=n;

if(c>0)//特判0

while(i--)

ans+=m[num[i]+c];

else

while(i--)

ans=ans+m[num[i]+c]-1;//當c為0時每個數字還得排掉自己呢~

printf("%d",ans);

return

0;}

這裡只用了25行,就打完了整個題目。看著別的童鞋打個幾十行**還沒法ac,心裡樂呵呀~

不過說一下,這樣的演算法時間複雜度是nlogn,因為map讀取的速度是logn,所以速度不是很快。話說最快是二分+縮點,有興趣的童鞋可以去做做。

最後說一下:stl大發好,退c轉c++保平安……

C map使用方法

map提供一對一的hash,採用key value鍵值對,可以是任意型別 包括自定義型別 標頭檔案 include 定義乙個map物件 mapmapstudent 插入資料 陣列方式,若已存在鍵,會覆蓋 mapstudent 1 student one 插入資料 pair方式,若已存在鍵,插入失敗 ...

c map的使用方法

map是c 的乙個標準容器,它提供了很好一對一的關係,在一些程式中建立乙個map可以起到事半功倍的效果,總結了一些map基本簡單實用的操作!1.map建構函式 mapmapstring mapmapint mapmapstring map char string mapchar mapmapchar...

C map的使用方法

map是stl的乙個關聯容器,它提供一對一 其中第乙個可以稱為關鍵字,每個關鍵字只能在map 現一次,第二個可能稱為該關鍵字的值即key value 的資料 處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。這裡說下map內部資料的組織,map內部自建一顆紅黑...