9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
學習啦 > 學習英語 > 專業英語 > 計算機英語 > c語言map的用法

c語言map的用法

時間: 澤燕681 分享

c語言map的用法

  C語言開發中經常會使用到map函數,關于map函數的用法你都清楚了解嗎,今天學習啦小編整理了c語言map的用法的。希望對你有幫助哦!

  c語言map的用法

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

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

  1、如果map中的key為struct此時,需要先對struct進行操作符重載,關于這部分內容可以參考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查找不到對應的數據(數據已經存在,find不到,遍歷可以找到)

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

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

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

  std::map<NHSymbolkey, Stru_NHSymbol*>* pmapNHSymbolInfo

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

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

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

  C語言map的用法詳解

  一、定義

  (1) map Map;

  (2) 或者是:typedef map Mymap;

  Mymap Map;

  二、插入數據

  插入數據之前先說一下pair 和 make_pair 的用法

  pair是一個結構體,有first和second 兩個域,可以直接訪問

  1 string key="sunquan";

  2 int value=123456;

  3 pair b(key, value);//這里 pair 是數據類型,后面是調帶參構造方法

  4 cout<

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

  下面步入正題:

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

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

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

  三、修改和查找數據

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

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

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

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

  四、刪除元素

  (1)通過key刪除;

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

  c語言中map的一些方法

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

  clear() 刪除所有元素

  count() 返回指定元素出現的次數

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

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

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

  erase() 刪除一個元素

  find() 查找一個元素

  insert()插入元素

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

  size() 返回map中元素的個數

  swap() 交換兩個map

  get_allocator() 返回map的配置器

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

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

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

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

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

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

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


猜你喜歡:

1.c語言中fprintf的用法

2.Mac系統怎樣使用終端編寫c語言程序

3.c語言學習心得6篇

4.c語言程序設計心得6篇

5.c語言using的用法

6.c語言中怎么畫圖

430831 主站蜘蛛池模板: 国产情侣激情在线对白| 囯产精品久久久久久久久久妞妞 | 色一伊人区二区亚洲最大| 国语精品自产拍在线观看网站| 青青青青国产免费线在线观看| 精品人妻系列无码天堂| 东京热大乱系列无码| 国产成人8X人网站视频| 亚洲日韩久久综合中文字幕| 国产农村激情免费专区| 九九成人免费视频| 精品国产乱来一区二区三区 | 777米奇色狠狠俺去啦| 亚洲AV日韩AV综合在线观看| 国产日韩AV免费无码一区二区三区 | 亚洲一区二区三级av| 久久亚洲欧美日本精品| 亚洲18禁一区二区三区| 国产在线欧美日韩精品一区| 国产成人亚洲无码淙合青草| 精品久久精品午夜精品久久| 自拍偷自拍亚洲精品情侣| 麻豆国产成人AV在线播放| 精品国产色情一区二区三区| 91人妻无码成人精品一区91| 国内自拍视频一区二区三区| 国产69精品久久久久99尤物| 亚洲AV永久无码嘿嘿嘿嘿| 蜜桃AV抽搐高潮一区二区| 色偷偷中文在线天堂中文| 精品国精品自拍自在线| 巨熟乳波霸若妻在线播放| 尤物国精品午夜福利视频| 亚洲熟妇精品一区二区| 欧美老熟妇乱子伦牲交视频 | 国产精品免费中文字幕| 免费高潮了好湿h视频| 熟妇的奶头又大又长奶水视频 | 久久综合国产精品一区二区| 国产永久免费高清在线观看| 九九热精品视频在线免费|