一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看

C語(yǔ)言

c語(yǔ)言中map的用法簡(jiǎn)介

時(shí)間:2024-12-17 14:21:12 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

c語(yǔ)言中map的用法簡(jiǎn)介

  C++實(shí)際開(kāi)發(fā)的過(guò)程會(huì )經(jīng)常使用到map。下面小編給大家整理了c語(yǔ)言中map的用法,供大家參閱。

  map是一個(gè)key-value值對,key唯一,可以用find進(jìn)行快速的查找。其時(shí)間復雜度為O(logN),如果采用for循環(huán)進(jìn)行遍歷數據時(shí)間復雜度為O(N)。如果map中的數據量比較少時(shí),采用find和for循環(huán)遍歷的效率基本沒(méi)有太大的區別,但是在實(shí)際的開(kāi)發(fā)過(guò)程中,存儲在map中的數據往往是大量的,這個(gè)時(shí)候map采用find方式效率比遍歷效率高的多。

  確定采用find方式查找數據后,我們需要考慮存儲map的空間復雜度,對于基礎數據類(lèi)型的數據(int char等)這里就不做討論。本文討論的是map中存儲的數據結構struct情況。

  1、如果map中的key為struct此時(shí),需要先對struct進(jìn)行操作符重載,關(guān)于這部分內容可以參考C++ 重載操作符示例

  2、map中的key只能是對象,而不能是指針。(這一點(diǎn)尤為重要)。

  下面給出三個(gè)map定義進(jìn)行說(shuō)明:

  std::map* pmapNHSymbolInfo1

  std::map* pmapNHSymbolInfo2

  std::map* pmapNHSymbolInfo2

  其中,pmapNHSymbolInfo1、pmapNHSymbolInfo2中使用find正常,遍歷也正常,pmapNHSymbolInfo3使用find查找不到對應的數據(數據已經(jīng)存在,find不到,遍歷可以找到)

  原因:std::map* pmapNHSymbolInfo2在find的時(shí)候是根據指針進(jìn)行查找的。而在數據時(shí),數據都是new的,每次new出的地址是不一樣的,在find數據時(shí),根據地址查找結果就找不到數據。通過(guò)遍歷是取出地址中內容一一比較,這樣能夠找到數據。

  pmapNHSymbolInfo1、pmapNHSymbolInfo2兩種方式都可以使用find方式查找數據,但是pmapNHSymbolInfo1中Stru_NHSymbol為對象,這樣會(huì )使map占用空間比較大,pmapNHSymbolInfo2的Stru_NHSymbol為指針,存儲時(shí)地址占用空間小,但是每次都是new處理來(lái)的,所有一定要記住使用完成后一定要,否則會(huì )出現內存泄露。

  3、map插入數據2中方式比較

  std::map* pmapNHSymbolInfo

  pmapNHSymbolInfo->(std::make_pair(pNHSymbolkey, pNHSymbol));該方式的key如果出現重復,則會(huì )插入數據失敗;

  (*pmapNHSymbolInfo)[objNHSymbolkey] = pNHSymbol;該方式的key如果出現重復則直接覆蓋掉原來(lái)的數據,永遠不會(huì )出現插入失敗的問(wèn)題。

  結論:C++ map中key不要使用指針,請直接使用對象。

【c語(yǔ)言中map的用法簡(jiǎn)介】相關(guān)文章:

c語(yǔ)言中map的基本用法10-28

c語(yǔ)言中char的用法簡(jiǎn)介09-29

c語(yǔ)言中bit的用法11-01

C語(yǔ)言中assert用法09-22

C語(yǔ)言中的assert用法10-10

c語(yǔ)言中default的用法05-26

c語(yǔ)言中多個(gè)if的用法11-12

c語(yǔ)言中g(shù)etch的用法06-01

c語(yǔ)言中邏輯或的用法05-23

一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看