最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于C++ map中key使用指針問題的詳解

 更新時間:2013年05月16日 10:28:40   作者:  
本篇文章是對C++ map中key使用指針的問題進行了詳細的分析介紹,需要的朋友參考下

C++實際開發(fā)的過程會經(jīng)常使用到map。map是一個key-value值對,key唯一,可以用find進行快速的查找。其時間復(fù)雜度為O(logN),如果采用for循環(huán)進行遍歷數(shù)據(jù)時間復(fù)雜度為O(N)。如果map中的數(shù)據(jù)量比較少時,采用find和for循環(huán)遍歷的效率基本沒有太大的區(qū)別,但是在實際的開發(fā)過程中,存儲在map中的數(shù)據(jù)往往是大量的,這個時候map采用find方式效率比遍歷效率高的多。

確定采用find方式查找數(shù)據(jù)后,我們需要考慮存儲map的空間復(fù)雜度,對于基礎(chǔ)數(shù)據(jù)類型的數(shù)據(jù)(int char等)這里就不做討論。本文討論的是map中存儲的數(shù)據(jù)結(jié)構(gòu)struct情況。
1、如果map中的key為struct此時,需要先對struct進行操作符重載,關(guān)于這部分內(nèi)容可以參考C++ 重載操作符示例
2、map中的key只能是對象,而不能是指針。(這一點尤為重要)。

下面給出三個map定義進行說明:

std::map<NHSymbolkey, Stru_NHSymbol>*   pmapNHSymbolInfo1
std::map<NHSymbolkey, Stru_NHSymbol*>*  pmapNHSymbolInfo2
std::map<NHSymbolkey*, Stru_NHSymbol*>*  pmapNHSymbolInfo2

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

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

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

3、map插入數(shù)據(jù)2中方式比較 
std::map<NHSymbolkey, Stru_NHSymbol*>*  pmapNHSymbolInfo
pmapNHSymbolInfo->insert(std::make_pair(pNHSymbolkey, pNHSymbol));該方式的key如果出現(xiàn)重復(fù),則會插入數(shù)據(jù)失??;

(*pmapNHSymbolInfo)[objNHSymbolkey] = pNHSymbol;該方式的key如果出現(xiàn)重復(fù)則直接覆蓋掉原來的數(shù)據(jù),永遠不會出現(xiàn)插入失敗的問題。
結(jié)論:C++ map中key不要使用指針,請直接使用對象。

相關(guān)文章

  • C++深入細致探究二叉搜索樹

    C++深入細致探究二叉搜索樹

    二叉搜索樹是以一棵二叉樹來組織的。每個節(jié)點是一個對象,包含的屬性有l(wèi)eft,right,p和key,其中,left指向該節(jié)點的左孩子,right指向該節(jié)點的右孩子,p指向該節(jié)點的父節(jié)點,key是它的值
    2022-05-05
  • matlab?GUI指紋識別門禁系統(tǒng)介紹及源碼實現(xiàn)

    matlab?GUI指紋識別門禁系統(tǒng)介紹及源碼實現(xiàn)

    這篇文章主要為大家介紹了matlab?GUI指紋識別門禁系統(tǒng)的介紹及源碼實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • 為什么獲取環(huán)境變量getenv小心有坑

    為什么獲取環(huán)境變量getenv小心有坑

    這篇文章主要介紹了獲取環(huán)境變量getenv小心有坑問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Qt5.9實現(xiàn)簡單的多線程實例(類QThread)

    Qt5.9實現(xiàn)簡單的多線程實例(類QThread)

    Qt開啟多線程,主要用到類QThread。用一個類繼承QThread,然后重新改寫虛函數(shù)run()。具有一定的參考價值,感興趣的可以了解一下
    2021-09-09
  • 哈希表實驗C語言版實現(xiàn)

    哈希表實驗C語言版實現(xiàn)

    以下是對哈希表實驗用C語言實現(xiàn)的代碼進行了詳細的分析介紹,需要的朋友可以參考下
    2013-07-07
  • C++ win系統(tǒng)如何用MinGW編譯Boost庫

    C++ win系統(tǒng)如何用MinGW編譯Boost庫

    這篇文章主要介紹了C++ win系統(tǒng)如何用MinGW編譯Boost庫問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C語言金幣陣列問題解決方法

    C語言金幣陣列問題解決方法

    這篇文章主要介紹了C語言金幣陣列問題解決方法,主要涉及數(shù)組的靈活運算,是一類非常經(jīng)典的算法,需要的朋友可以參考下
    2014-09-09
  • C語言 自增自減運算的區(qū)別詳解及實例

    C語言 自增自減運算的區(qū)別詳解及實例

    這篇文章主要介紹了C語言中的++a和a++的區(qū)別詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • set_new_handler(0)有什么用

    set_new_handler(0)有什么用

    本文主要介紹了set_new_handler(0)有什么用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C語言?程序的編譯系統(tǒng)解析

    C語言?程序的編譯系統(tǒng)解析

    編譯程序的基本功能是把源程序(高級語言)翻譯成目標程序。但是,作為一個具有實際應(yīng)用價值的編譯系統(tǒng),除了基本功能之外,還應(yīng)具備語法檢查、調(diào)試措施、修改手段、覆蓋處理、目標程序優(yōu)化、不同語言合用以及人-機聯(lián)系等重要功能
    2022-02-02

最新評論

新巴尔虎左旗| 莱州市| 贡觉县| 新安县| 闻喜县| 肇庆市| 和顺县| 永胜县| 富民县| 甘南县| 星座| 兖州市| 盖州市| 盐源县| 连南| 凌源市| 巫山县| 边坝县| 武平县| 江油市| 金华市| 潜江市| 烟台市| 远安县| 九龙坡区| 昌宁县| 新和县| 成武县| 中山市| 如皋市| 阜宁县| 平武县| 尼木县| 关岭| 贞丰县| 库尔勒市| 伊吾县| 大渡口区| 马公市| 贵阳市| 卢湾区|