0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是 map?

汽車電子技術(shù) ? 來源:C語言Plus ? 作者: Maye426 ? 2023-02-27 15:41 ? 次閱讀

一、什么是 map?

map 容器,又稱鍵值對容器,即該容器的底層是以紅黑樹變體實現(xiàn)的,是典型的關(guān)聯(lián)式容器。這意味著,map 容器中的元素可以分散存儲在內(nèi)存空間里,而不是必須存儲在一整塊連續(xù)的內(nèi)存空間中。跟任意其它類型容器一樣,它能夠存放各種類型的對象。

二、容器特性

1.存儲結(jié)構(gòu)

map是由多個節(jié)點(二叉樹中的紅黑樹變體)組成的。

2.鍵值對

map是一個鍵值對序列,即(key,value)——封裝在結(jié)構(gòu)體pair中,它提供基于key的快速檢索能力,不能在指定位置插入,但支持at(pos)和[]操作。如:map[key]=value;

multimap與map的區(qū)別:map中的key只能唯一,每個key只能出現(xiàn)一次;而multimap中同一key可以出現(xiàn)多次。

3.雙向迭代器

不支持隨機(jī)訪問迭代器,只能從容器中第一個元素或最后一個元素開始遍歷容器,直到找到該位置。

三、基本函數(shù)實現(xiàn)

1,構(gòu)造函數(shù)

  • map();創(chuàng)建一個空map
  • map(const map&);復(fù)制構(gòu)造函數(shù)
  • map(begin,end);復(fù)制[begin,end)區(qū)間內(nèi)的元素,到另一個map中

2.map插入

  • pair insert(const T& x); //往容器插入元素,返回pair

    在map中插入元素的三種方式:

    假設(shè) map mapStu;

    一、通過pair的方式插入對象

    mapStu.insert( pair(3,"小張") );

    二、通過pair的方式插入對象

    mapStu.inset(make_pair(-1, “校長-1”));

    三、通過value_type的方式插入對象

    mapStu.insert( map::value_type(1,"小李") );

    四、通過索引(key)的方式插入值

    mapStu[3] = “小劉";

    mapStu.at(4) = “小王";

    • 注意:使用key的方式插入,當(dāng)key存在時會直接修改key對應(yīng)的值,當(dāng)key不存在時會新建一個然后插入

3.map刪除

  • iterator erase(iterator it);刪除鍵值對中迭代器指向元素
  • iterator erase(iterator first,iterator last);刪除鍵值對中[first,last)中元素
  • size_type erase(const key_type& key); 刪除指定的元素
  • void clear();清空鍵值對中所有元素

4.查找函數(shù)

  • iterator map.find(key); 查找鍵key是否存在,若存在,返回該鍵的元素的迭代器;若不存在,返回map.end();

  • size_type map.count(keyElem); //返回容器中key為keyElem的對組個數(shù)。對map來說,要么是0,要么是1。對multimap來說,值可能大于1。

  • pair map.equal_range(keyElem); //返回容器中key與keyElem相等的上下限的兩個迭代器。上限是閉區(qū)間,下限是開區(qū)間,如[beg,end)。

    以上函數(shù)返回兩個迭代器,而這兩個迭代器被封裝在pair中。

5.判斷函數(shù)

  • bool empty() const;判斷容器中是否有元素,若無元素,則返回 true;反之,返回 false。

6.大小函數(shù)

  • int size() const;返回鍵值對中元素的個數(shù)
  • int max_size() const;返回最大可允許的map元素數(shù)量值

7.其他函數(shù)

  • void swap(map&);交換兩個同類型容器的數(shù)據(jù)

四、基本用法

#include 
#include
using namespace std;
int main()
{
  //保存學(xué)生學(xué)號和姓名
  map<int,string> s;
  for (int i = 0; i < 10; i++)
  {
    string ch = "ABCDEFGHIJ";
    string name= "maye";
    //注意pair的類型參數(shù),需要和map的一致
    s.insert(pair<int,string>(i,name+ch[i]));
  }
  s.insert(make_pair(111, "C語言PLUS"));
  s.insert(map<int, string>::value_type(222, "法外狂徒"));
  s[333] = "頑石";


  cout << "學(xué)號:" <<" "<< "姓名:" << endl;
  for (map<int, string>::iterator it = s.begin(); it != s.end(); it++)
  {
    cout << it->first << "      " << it->second << endl;
  }
  //cout << "\\nmap size():" << s.size() << endl;


  //查找指定的key值,返回指向的迭代器,沒有找到返回end()迭代器,所以再輸出之前需要判斷是否找到
  map<int, string>::iterator it1 = s.find(6);
  if (it1 != s.end())
  {
    cout << it1->first << " " << it1->second << endl;
  }
  //如果map中有等于4的key,則返回指向4的迭代器,如果沒有返回第一個大于4的元素的迭代器,沒有找到返回end()迭代器
  it1 = s.lower_bound(4);
  if (it1 != s.end())
  {
    cout << it1->first << " " << it1->second << endl;
  }
  //如果map中有大于4的key,返回第一個大于4的元素的迭代器,沒有找到返回end()迭代器
  it1 = s.upper_bound(4);
  if (it1 != s.end())
  {
    cout << it1->first << " " << it1->second << endl;
  }
  cout << "------------------我是 C語言Plus 華麗分割線" << endl;
  //定義對組,接受equal_range()的返回值
  pair
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    495

    瀏覽量

    22062
  • MAP
    MAP
    +關(guān)注

    關(guān)注

    0

    文章

    49

    瀏覽量

    15144
  • 元素
    +關(guān)注

    關(guān)注

    0

    文章

    47

    瀏覽量

    8435
收藏 人收藏

    評論

    相關(guān)推薦

    【Linux編程】如何使用gcc編譯源代碼時輸出map文件?

    【Linux編程】如何使用gcc編譯源代碼時輸出map文件?
    的頭像 發(fā)表于 08-15 14:08 ?8271次閱讀
    【Linux編程】如何使用gcc編譯源代碼時輸出<b class='flag-5'>map</b>文件?

    C++之map/mutimap容器

    map/multimap容器,也是一個關(guān)聯(lián)式容器,底層通過二叉樹實現(xiàn)。
    的頭像 發(fā)表于 07-17 09:45 ?1103次閱讀
    C++之<b class='flag-5'>map</b>/mutimap容器

    基于Google Map Api的Android導(dǎo)航應(yīng)用

    本文提出并實現(xiàn)了一種基于Google Map Api 的Android 導(dǎo)航應(yīng)用,能夠給用戶提供人性化和智能化的地圖導(dǎo)航服務(wù)。
    發(fā)表于 11-21 15:09 ?5233次閱讀

    Map Service Engine Based On We

    Abstract:A design and implementation of map service engine based on web is introduced
    發(fā)表于 07-23 10:43 ?17次下載

    MAP圖對調(diào)速電機(jī)的作用

    MAP圖對調(diào)速電機(jī)的作用,學(xué)習(xí)資料,感興趣的可以看看。
    發(fā)表于 10-26 15:12 ?0次下載

    紋理映射技術(shù)中Mip_Map的研究_曾云

    紋理映射技術(shù)中Mip_Map的研究_曾云
    發(fā)表于 03-15 11:08 ?0次下載

    基于DSP的Max-Log-MAP算法解析

    是近年來研究工作的熱點。Turbo碼采用反饋迭代譯碼結(jié)構(gòu),成員譯碼器使用最大后驗概率(MAP)譯碼算法譯碼,由于MAP算法含有大量的指數(shù)運算與對數(shù)運算,給實現(xiàn)帶來極大的困難,在工程應(yīng)用中,通常采用其對數(shù)域的簡化算法Log-MAP
    發(fā)表于 11-04 10:47 ?5次下載
    基于DSP的Max-Log-<b class='flag-5'>MAP</b>算法解析

    mapreduce 中MAP進(jìn)程的數(shù)量怎么控制?

    1.如果想增加map個數(shù),則設(shè)置mapred.map.tasks 為一個較大的值2.如果想減小map個數(shù),則設(shè)置mapred.min.split.size 為一個較大的值3.如果輸入中有很多小文件,依然想減少
    發(fā)表于 01-02 14:04 ?1892次閱讀
    mapreduce 中<b class='flag-5'>MAP</b>進(jìn)程的數(shù)量怎么控制?

    Mapreduce和Hive中map reduce個數(shù)設(shè)定

    Mapreduce中mapper個數(shù)的確定: 在map階段讀取數(shù)據(jù)前,F(xiàn)ileInputFormat會將輸入文件分割成split。split的個數(shù)決定了map的個數(shù)。 影響map個數(shù),即split
    發(fā)表于 01-02 14:21 ?6116次閱讀

    mapreduce設(shè)置map個數(shù)_mapreduce設(shè)置map內(nèi)存

    map階段讀取數(shù)據(jù)前,F(xiàn)ileInputFormat會將輸入文件分割成split,split的個數(shù)決定了map的個數(shù)。
    發(fā)表于 01-02 14:26 ?1.1w次閱讀
    mapreduce設(shè)置<b class='flag-5'>map</b>個數(shù)_mapreduce設(shè)置<b class='flag-5'>map</b>內(nèi)存

    Java Map的幾種循環(huán)方式學(xué)習(xí)總結(jié)

    本文檔內(nèi)容介紹了基于Java Map的幾種循環(huán)方式學(xué)習(xí)總結(jié),供參考
    發(fā)表于 03-19 15:51 ?0次下載

    MDK- ARM中map文件全解析

    MDK-ARM中map文件全解析
    的頭像 發(fā)表于 03-14 14:00 ?6065次閱讀
    MDK- ARM中<b class='flag-5'>map</b>文件全解析

    單片機(jī)中的MAP文件分析

    一、要讓Keil生成map文件,要設(shè)置:再重新編譯,沒有錯誤后,就會生成map文件了。二、map文件中相關(guān)概念:段(section) :描述映像文件的代碼和數(shù)據(jù)塊。RO:Read-Only的縮寫
    發(fā)表于 11-15 10:36 ?12次下載
    單片機(jī)中的<b class='flag-5'>MAP</b>文件分析

    MAP傳感器有什么作用?是如何工作的?

    MAP是歧管絕對壓力的縮寫。該MAP傳感器通過測量進(jìn)氣歧管中的空氣量來檢測進(jìn)入發(fā)動機(jī)的空氣量。然后,ECU使用此空氣測量來管理注入發(fā)動機(jī)的汽油量并修改點火正時,這兩者都對您的發(fā)動機(jī)正常運行至關(guān)重要。
    發(fā)表于 05-23 15:32 ?2464次閱讀
    <b class='flag-5'>MAP</b>傳感器有什么作用?是如何工作的?

    List 轉(zhuǎn) Map的方法

    在我們平時的工作中,充滿了各種類型之間的轉(zhuǎn)換。今天小編帶大家上手 List 轉(zhuǎn) Map 的各種操作。 我們將假設(shè) List 中的每個元素都有一個標(biāo)識符,該標(biāo)識符將在生成的 Map 中作為一個鍵
    的頭像 發(fā)表于 10-09 16:10 ?1635次閱讀