范文為教學(xué)中作為模范的文章,也常常用來(lái)指寫作的模板。常常用于文秘寫作的參考,也可以作為演講材料編寫前的參考。大家想知道怎么樣才能寫一篇比較優(yōu)質(zhì)的范文嗎?下面是小編為大家收集的優(yōu)秀范文,供大家參考借鑒,希望可以幫助到有需要的朋友。
c語(yǔ)言中map函數(shù)篇一
c++實(shí)際開發(fā)的過(guò)程會(huì)經(jīng)常使用到map。下面小編給大家整理了c語(yǔ)言中map的用法,供大家參閱。
map是一個(gè)key-value值對(duì),key唯一,可以用find進(jìn)行快速的查找。其時(shí)間復(fù)雜度為o(logn),如果采用for循環(huán)進(jìn)行遍歷數(shù)據(jù)時(shí)間復(fù)雜度為o(n)。如果map中的數(shù)據(jù)量比較少時(shí),采用find和for循環(huán)遍歷的效率基本沒(méi)有太大的區(qū)別,但是在實(shí)際的開發(fā)過(guò)程中,存儲(chǔ)在map中的數(shù)據(jù)往往是大量的,這個(gè)時(shí)候map采用find方式效率比遍歷效率高的多。
確定采用find方式查找數(shù)據(jù)后,我們需要考慮存儲(chǔ)map的空間復(fù)雜度,對(duì)于基礎(chǔ)數(shù)據(jù)類型的數(shù)據(jù)(int char等)這里就不做討論。本文討論的是map中存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)struct情況。
下面給出三個(gè)map定義進(jìn)行說(shuō)明:
std::map* pmapnhsymbolinfo1
std::map* pmapnhsymbolinfo2
std::map* pmapnhsymbolinfo2
其中,pmapnhsymbolinfo1、pmapnhsymbolinfo2中使用find正常,遍歷也正常,pmapnhsymbolinfo3使用find查找不到對(duì)應(yīng)的數(shù)據(jù)(數(shù)據(jù)已經(jīng)存在,find不到,遍歷可以找到)
原因:std::map* pmapnhsymbolinfo2在find的時(shí)候是根據(jù)指針進(jìn)行查找的。而在數(shù)據(jù)時(shí),數(shù)據(jù)都是new的,每次new出的地址是不一樣的,在find數(shù)據(jù)時(shí),根據(jù)地址查找結(jié)果就找不到數(shù)據(jù)。通過(guò)遍歷是取出地址中內(nèi)容一一比較,這樣能夠找到數(shù)據(jù)。
pmapnhsymbolinfo1、pmapnhsymbolinfo2兩種方式都可以使用find方式查找數(shù)據(jù),但是pmapnhsymbolinfo1中stru_nhsymbol為對(duì)象,這樣會(huì)使map占用空間比較大,pmapnhsymbolinfo2的stru_nhsymbol為指針,存儲(chǔ)時(shí)地址占用空間小,但是每次都是new處理來(lái)的,所有一定要記住使用完成后一定要,否則會(huì)出現(xiàn)內(nèi)存泄露。
std::map* pmapnhsymbolinfo
pmapnhsymbolinfo->(std::make_pair(pnhsymbolkey, pnhsymbol));該方式的key如果出現(xiàn)重復(fù),則會(huì)插入數(shù)據(jù)失敗;
(*pmapnhsymbolinfo)[objnhsymbolkey] = pnhsymbol;該方式的key如果出現(xiàn)重復(fù)則直接覆蓋掉原來(lái)的數(shù)據(jù),永遠(yuǎn)不會(huì)出現(xiàn)插入失敗的問(wèn)題。
結(jié)論:c++ map中key不要使用指針,請(qǐng)直接使用對(duì)象。
s("content_relate");【c語(yǔ)言中map的用法簡(jiǎn)介】相關(guān)文章:
1.c語(yǔ)言中map的基本用法2.c語(yǔ)言中char的用法簡(jiǎn)介3.c語(yǔ)言中assert用法4.c語(yǔ)言中的assert用法5.c語(yǔ)言中default的用法6.c語(yǔ)言中free的用法7.c語(yǔ)言中bit的用法8.c語(yǔ)言中sscanf的用法