精品丰满熟女一区二区三区_五月天亚洲欧美综合网_亚洲青青青在线观看_国产一区二区精选

  • <menu id="29e66"></menu>

    <bdo id="29e66"><mark id="29e66"><legend id="29e66"></legend></mark></bdo>

  • <pre id="29e66"><tt id="29e66"><rt id="29e66"></rt></tt></pre>

      <label id="29e66"></label><address id="29e66"><mark id="29e66"><strike id="29e66"></strike></mark></address>
      學(xué)習(xí)啦 > 學(xué)習(xí)英語 > 專業(yè)英語 > 計(jì)算機(jī)英語 > c語言map的用法

      c語言map的用法

      時(shí)間: 澤燕681 分享

      c語言map的用法

        C語言開發(fā)中經(jīng)常會(huì)使用到map函數(shù),關(guān)于map函數(shù)的用法你都清楚了解嗎,今天學(xué)習(xí)啦小編整理了c語言map的用法的。希望對你有幫助哦!

        c語言map的用法

        C++實(shí)際開發(fā)的過程會(huì)經(jīng)常使用到map。map是一個(gè)key-value值對,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)遍歷的效率基本沒有太大的區(qū)別,但是在實(shí)際的開發(fā)過程中,存儲(chǔ)在map中的數(shù)據(jù)往往是大量的,這個(gè)時(shí)候map采用find方式效率比遍歷效率高的多。

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

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

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

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

        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的時(shí)候是根據(jù)指針進(jìn)行查找的。而在數(shù)據(jù)insert時(shí),數(shù)據(jù)都是new的,每次new出的地址是不一樣的,在find數(shù)據(jù)時(shí),根據(jù)地址查找結(jié)果就找不到數(shù)據(jù)。通過遍歷是取出地址中內(nèi)容一一比較,這樣能夠找到數(shù)據(jù)。

        pmapNHSymbolInfo1、pmapNHSymbolInfo2兩種方式都可以使用find方式查找數(shù)據(jù),但是pmapNHSymbolInfo1中Stru_NHSymbol為對象,這樣會(huì)使map占用空間比較大,pmapNHSymbolInfo2的Stru_NHSymbol為指針,存儲(chǔ)時(shí)地址占用空間小,但是每次都是new處理來的,所有一定要記住使用完成后一定要delete,否則會(huì)出現(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ù),則會(huì)插入數(shù)據(jù)失敗;

        (*pmapNHSymbolInfo)[objNHSymbolkey] = pNHSymbol;該方式的key如果出現(xiàn)重復(fù)則直接覆蓋掉原來的數(shù)據(jù),永遠(yuǎn)不會(huì)出現(xiàn)插入失敗的問題。

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

        C語言map的用法詳解

        一、定義

        (1) map Map;

        (2) 或者是:typedef map Mymap;

        Mymap Map;

        二、插入數(shù)據(jù)

        插入數(shù)據(jù)之前先說一下pair 和 make_pair 的用法

        pair是一個(gè)結(jié)構(gòu)體,有first和second 兩個(gè)域,可以直接訪問

        1 string key="sunquan";

        2 int value=123456;

        3 pair b(key, value);//這里 pair 是數(shù)據(jù)類型,后面是調(diào)帶參構(gòu)造方法

        4 cout<

        而make_pair是返回一個(gè)pair <類型,類型> 的數(shù)據(jù),eg:make_pair("asa",123456); 不過還得找個(gè)pair 類型的變量來接受返回值。

        下面步入正題:

        (1) Map["abc"]=1;

        (2) Map.insert(pair("c",3));

        (3)Map.insert(make_pair("d",4));

        三、修改和查找數(shù)據(jù)

        (1)修改Map["sunquan"]=11111;

        (2)查找數(shù)據(jù) 用Map.find(key); 可以通過鍵來查。

        切記不要用int value=Map[key];這樣會(huì)在Map中增加這個(gè)key,而value就是缺省值(int 為0,string為空字符串)。

        通過方法(2),會(huì)返回迭代器的地址,key不存在的話迭代器的值為Map.end();

        四、刪除元素

        (1)通過key刪除;

        (2)通過迭代器來刪除;

        c語言中map的一些方法

        begin() 返回指向map頭部的迭代器

        clear() 刪除所有元素

        count() 返回指定元素出現(xiàn)的次數(shù)

        empty() 如果map為空則返回true

        end() 返回指向map末尾的迭代器

        equal_range() 返回特殊條目的迭代器對

        erase() 刪除一個(gè)元素

        find() 查找一個(gè)元素

        insert()插入元素

        max_size()返回可以容納的最大元素個(gè)數(shù)

        size() 返回map中元素的個(gè)數(shù)

        swap() 交換兩個(gè)map

        get_allocator() 返回map的配置器

        key_comp() 返回比較元素key的函數(shù)

        lower_bound() 返回鍵值>=給定元素的第一個(gè)位置

        max_size() 返回可以容納的最大元素個(gè)數(shù)

        rbegin() 返回一個(gè)指向map尾部的逆向迭代器

        rend() 返回一個(gè)指向map頭部的逆向迭代器

        upper_bound() 返回鍵值>給定元素的第一個(gè)位置

        value_comp() 返回比較元素value的函數(shù)


      猜你喜歡:

      1.c語言中fprintf的用法

      2.Mac系統(tǒng)怎樣使用終端編寫c語言程序

      3.c語言學(xué)習(xí)心得6篇

      4.c語言程序設(shè)計(jì)心得6篇

      5.c語言using的用法

      6.c語言中怎么畫圖

      430831