六月丁香五月婷婷,丁香五月婷婷网,欧美激情网站,日本护士xxxx,禁止18岁天天操夜夜操,18岁禁止1000免费,国产福利无码一区色费

學(xué)習(xí)啦 > 學(xué)習(xí)英語(yǔ) > 專業(yè)英語(yǔ) > 計(jì)算機(jī)英語(yǔ) > c語(yǔ)言中map的用法可以用來(lái)做什么

c語(yǔ)言中map的用法可以用來(lái)做什么

時(shí)間: 長(zhǎng)思709 分享

c語(yǔ)言中map的用法可以用來(lái)做什么

  C++中map容器提供一個(gè)鍵值對(duì)容器,那么你知道m(xù)ap的用法有哪些嗎,下面學(xué)習(xí)啦小編就跟你們?cè)敿?xì)介紹下c語(yǔ)言中map的用法,希望對(duì)你們有用。

  c語(yǔ)言中map的用法:map基本用法

  1. 頭文件

  復(fù)制代碼 代碼如下:

  #include <map>

  2. 定義

  復(fù)制代碼 代碼如下:

  map<int,int> my_Map; //注意這里的int和int可以是其他類型

  或者是

  復(fù)制代碼 代碼如下:

  typedef map<int,int> MY_MAP;

  MY_MAP my_Map;

  3. 插入數(shù)據(jù)

  (1) my_Map[1] = 1;

  (2) my_Map.insert(map<int, int>::value_type(2,2));

  (3) my_Map.insert(pair<int,int>(3,3));

  (4) my_Map.insert(make_pair<string,int>(4,4));

  4. 查找數(shù)據(jù)和修改數(shù)據(jù)

  (1)

  復(fù)制代碼 代碼如下:

  int i = my_Map[1];

  my_Map[1] = i;

  (2)

  復(fù)制代碼 代碼如下:

  MY_MAP::iterator my_Itr;

  my_Itr.find(2);

  int j = my_Itr->second;

  my_Itr->second = j;

  注意:

  A.鍵本身是不能被修改的,除非刪除。

  B.不管鍵存不存在,比如my_Map[1] = i;,都會(huì)執(zhí)行賦值操作。

  5. 刪除數(shù)據(jù)

  (1) my_Map.erase(my_Itr);

  (2) my_Map.erase(3);

  6. 遍歷數(shù)據(jù)

  復(fù)制代碼 代碼如下:

  for(my_Itr=my_Map.begin();my_Itr!=my_Map.end();++my_Itr){}

  7. 其它方法

  my_Map.size() :返回元素?cái)?shù)目

  my_Map.empty():判斷是否為空

  my_Map.clear() :清空所有元素

  c語(yǔ)言中map的用法:嵌套用法

  1.示例如下:

  復(fù)制代碼 代碼如下:

  map<int,map<int,int> >multiMap; //對(duì)于這樣的map嵌套定義,

  map<int, int> temp; //定義一個(gè)map<int, string>變量,對(duì)其定義后在插入multiMap

  temp[9] = 9;

  temp[10] = 10;

  multiMap[10] = temp;

  multiMap[10][11]=11;

  multiMap[5][30]=30;

  map<int,map<int,int> >::iterator multitr; // 以下是如何遍歷本multiMap

  map<int,int>::iterator intertr;

  for(multitr=multiMap.begin();multitr!=multiMap.end();multitr++)

  {

  for(intertr= multitr ->second.begin(); intertr != multitr ->second.end(); intertr ++)

  cout<< multitr ->first<<" "<<intertr->first<<" ("<<intertr -> second <<")"<<endl;

  }

  2.也可以這樣:

  復(fù)制代碼 代碼如下:

  map<int,map<int,int>* >multiMap;

  map<int, int>* temp = new map<int, int>;

  multiMap[10]=temp;

  這樣動(dòng)態(tài)new內(nèi)存,就要記得delete,否則會(huì)有內(nèi)存泄露,delete如下:

  復(fù)制代碼 代碼如下:

  map<int, int>* temp1;

  for(multitr=multiMap.begin();multitr!=multiMap.end();multitr++)

  {

  temp1 = multitr ->second;

  delete temp1;

  temp1 = NULL;

  }

  c語(yǔ)言中map的用法

  1 頭文件

  #include

  2、map的功能

  自動(dòng)建立Key - value的對(duì)應(yīng)。key 和 value可以是任意你需要的類型。

  根據(jù)key值快速查找記錄,查找的復(fù)雜度基本是Log(N),如果有1000個(gè)記錄,最多查找10次,1,000,000個(gè)記錄,最多查找20次。

  快速插入Key - Value 記錄。

  快速刪除記錄

  根據(jù)Key 修改value記錄。

  遍歷所有記錄。

  3,

  map的構(gòu)造函數(shù)

  map共提供了6個(gè)構(gòu)造函數(shù),這塊涉及到內(nèi)存分配器這些東西,略過(guò)不表,在下面我們將接觸到一些map的構(gòu)造方法,這里要說(shuō)下的就是,我們通常用如下方法構(gòu)造一個(gè)map:

  Map mapStudent;

  定義

  map my_Map;

  或者是typedef map MY_MAP;

  MY_MAP my_Map;

  4, 插入數(shù)據(jù)

  (1) my_Map["a"] = 1;

  改變map中的條目非常簡(jiǎn)單,因?yàn)閙ap類已經(jīng)對(duì)[]操作符進(jìn)行了重載

  enumMap[1] = "One";

  enumMap[2] = "Two";

  .....

  這樣非常直觀,但存在一個(gè)性能的問(wèn)題。插入2時(shí),先在enumMap中查找主鍵為2的項(xiàng),沒(méi)發(fā)現(xiàn),然后將一個(gè)新的對(duì)象插入enumMap,鍵是2,值是一個(gè)空字符串,插入完成后,將字符串賦為"Two"; 該方法會(huì)將每個(gè)值都賦為缺省值,然后再賦為顯示的值,如果元素是類對(duì)象,則開銷比較大。我們可以用以下方法來(lái)避免開銷:

  enumMap.insert(map :: value_type(2, "Two"))

  (2) my_Map.insert(map::value_type("b",2));

  (3) my_Map.insert(pair("c",3));

  (4) my_Map.insert(make_pair("d",4));

  note : 如果相同元素放入到map中就是操作失敗,此處可應(yīng)用于看看map中是否有此元素,插入判斷,防止代碼實(shí)現(xiàn)功能錯(cuò)誤

  5.

  查找并獲取map中的元素

  下標(biāo)操作符給出了獲得一個(gè)值的最簡(jiǎn)單方法:

  CString tmp = enumMap[2];

  但是,只有當(dāng)map中有這個(gè)鍵的實(shí)例時(shí)才對(duì),否則會(huì)自動(dòng)插入一個(gè)實(shí)例,值為初始化值。

  我們可以使用Find()和Count()方法來(lái)發(fā)現(xiàn)一個(gè)鍵是否存在。

  查找map中是否包含某個(gè)關(guān)鍵字條目用find()方法,傳入的參數(shù)是要查找的key,在這里需要提到的是begin()和end()兩個(gè)成員,分別代表map對(duì)象中第一個(gè)條目和最后一個(gè)條目,這兩個(gè)數(shù)據(jù)的類型是iterator.

  int nFindKey = 2; //要查找的Key

  //定義一個(gè)條目變量(實(shí)際是指針)

  UDT_MAP_INT_CSTRING::iterator it= enumMap.find(nFindKey);

  if(it == enumMap.end()) {

  //沒(méi)找到

  }

  else {

  //找到

  }

  6, 迭代數(shù)據(jù)

  for (my_Itr=my_Map.begin(); my_Itr!=my_Map.end(); ++my_Itr) {}

  7,map的大小

  在往map里面插入了數(shù)據(jù),我們?cè)趺粗喇?dāng)前已經(jīng)插入了多少數(shù)據(jù)呢,可以用size函數(shù),用法如下:

  Int nSize = mapStudent.size();

  8,,數(shù)據(jù)的清空與判空

  清空map中的數(shù)據(jù)可以用clear()函數(shù),判定map中是否有數(shù)據(jù)可以用empty()函數(shù),它返回true則說(shuō)明是空map

  9,

  //如果要?jiǎng)h除1,用迭代器刪除

  map::iterator iter;

  iter = mapStudent.find(1);

  mapStudent.erase(iter);

  //如果要?jiǎng)h除1,用關(guān)鍵字刪除

  Int n = mapStudent.erase(1);//如果刪除了會(huì)返回1,否則返回0

  //用迭代器,成片的刪除

  //一下代碼把整個(gè)map清空

  mapStudent.earse(mapStudent.begin(), mapStudent.end());

  //成片刪除要注意的是,也是STL的特性,刪除區(qū)間是一個(gè)前閉后開的集


猜你喜歡:

1.c語(yǔ)言double的用法

2.c語(yǔ)言中fprintf的用法

3.c語(yǔ)言中怎么畫圖

4.c語(yǔ)言flag的用法

5.C語(yǔ)言程序中什么是函數(shù)

533257