c map容器介紹

2021-08-13 09:24:59 字數 4788 閱讀 6847

map是c

++的乙個標準容器,她提供了很好一對一的關係,在一些程式中建立乙個map可以起到事半功倍的效果,總結了一些map基本簡單實用的操作! 1

、map簡介

map是一類關聯式容器。它的特點是增加和刪除節點對迭代器的影響很小,除了那個操作節點,對其他的節點都沒有什麼影響。

對於迭代器來說,可以修改實值,而不能修改key。 2

、map的功能

自動建立key - value的對應。key 和 value可以是任意你需要的型別。

根據key值快速查詢記錄,查詢的複雜度基本是log(n

),如果有1000個記錄,最多查詢10次,1,

000,

000個記錄,最多查詢20次。

快速插入key 

-value 

記錄。

快速刪除記錄

根據key 修改value記錄。

遍歷所有記錄。

3、使用map

使用map得包含map類所在的標頭檔案

#include //注意,stl標頭檔案沒有副檔名.h

map物件是模板類,需要關鍵字和儲存物件兩個模板引數:

std:map

<

int,

string

personnel;

這樣就定義了乙個用int作為索引,

並擁有相關聯的指向string的指標.

為了使用方便,可以對模板類進行一下型別定義,

typedef 

map<

int,

cstring

udt_map_int_cstring;

udt_map_int_cstring enummap;

4、在map中插入元素

改變map中的條目非常簡單,因為map類已經對

操作符進行了過載

enummap[1

] ="one";

enummap[2

] ="two";

.....

這樣非常直觀,但存在乙個效能的問題。插入2時,

先在enummap中查詢主鍵為2的項,沒發現,然後將乙個新的物件插入enummap,鍵是2,

值是乙個空字串,插入完成後,將字串賦為

"two"

;該方法會將每個值都賦為預設值,然後再賦為顯示的值,如果元素是類物件,則開銷比較大。

我們可以用以下方法來避免開銷:

enummap.

insert

(map

<

int,

cstring

:: value_type(2

,"two"))

enummap

.insert

(pair

<

int,

string

>(

102,

"aclive"

));

5、查詢並獲取map中的元素

下標操作符給出了獲得乙個值的最簡單方法:

cstring tmp 

=enummap[2

]; 但是,

只有當map中有這個鍵的例項時才對,否則會自動插入乙個例項,值為初始化值。

我們可以使用find

()和count

()方法來發現乙個鍵是否存在。

查詢map中是否包含某個關鍵字條目用find

()方法,傳入的引數是要查詢的key,在這裡需要提到的是begin

()和end

()兩個成員,

分別代表map物件中第乙個條目和最後乙個條目,這兩個資料的型別是iterator.

int 

nfindkey= 2

;//要查詢的key

//定義乙個條目變數(實際是指標)

udt_map_int_cstring::iterator it

=enummap

.find

(nfindkey);

if(it== 

enummap

.end

())

else 

通過map物件的方法獲取的iterator資料型別是乙個std::pair物件,包括兩個資料 iterator->

first

和 iterator

->

second

分別代表關鍵字和儲存的資料

6.從map中刪除元素

移除某個map中某個條目用erase()

該成員方法的定義如下:

iterator erase(iterator it);//通過乙個條目物件刪除

iterator erase(iterator first,iterator last)//刪除乙個範圍

size_type erase(const key&key);//通過關鍵字刪除

clear()就相當於enummap.erase(enummap.begin(),enummap.end());

7.map中的swap用法

map中德swap不是乙個容器中的元素交換,而是兩個容器的交換;

8.map中的sort問題

map中的元素是自動按key公升序排序,所以不能對map用sort函式;

9.  

map的基本操作函式:

c++ 

maps

是一種關聯式容器,包含「關鍵字/

值」對begin

()         

返回指向map頭部的迭代器

clear

()        刪除所有元素

count

()         

返回指定元素出現的次數

empty

()         

如果map為空則返回true

end()           

返回指向map末尾的迭代器

equal_range

()   

返回特殊條目的迭代器對

erase

()         

刪除乙個元素

find

()          

查詢乙個元素

get_allocator

() 返回map的配置器

insert

()        

插入元素

key_comp

()      

返回比較元素key的函式

lower_bound

()   

返回鍵值

>=

給定元素的第乙個位置

max_size

()      

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

rbegin

()        

返回乙個指向map尾部的逆向迭代器

rend

()          

返回乙個指向map頭部的逆向迭代器

size

()          

返回map中元素的個數

swap

()           

交換兩個map

upper_bound

()    

返回鍵值

>

給定元素的第乙個位置

value_comp

()     

返回比較元素value的函式

以下是map容器的應用例項:

[cpp]

view plain

copy

#include 

#include 

#include 

using

namespace

std;  

void

map_insert(map < string, string > *mapstudent, string index, string x)  

intmain(

intargc, 

char

**argv)   

else

//see element 

for(iter = maps.begin(); iter != maps.end(); iter )    

cout << "-----------------------------"

<< endl;  

map_insert(&maps, "192.168.30.23"

, "xf"

);  

cout << "after we insert one element:"

<< endl;   

cout << "-----------------------------"

<< endl;   

for(iter = maps.begin(); iter != maps.end(); iter )   

cout << "-----------------------------"

<< endl;  

//delete element 

iter = maps.find("192.168.200.33"

);   

if(iter != maps.end())  else

for(iter = maps.begin(); iter != maps.end(); iter )    

cout << "******************************==="

<< endl;  

return

0;   

}   

C map容器複習

迭代器作用 檢查容器內元素 訪問元素,是一種資料型別。與下標操作的比較 所有標準庫容器都有對應的迭代器型別,但只有少數容器支援下標操作。迭代器應用更廣泛。定義 如vector iterator iter iter的資料型別是由vector定義的iterator型別。iterator是容器型別的成員函...

C map 映照容器

map映照容器的元素資料是乙個鍵值和乙個映照資料組成的,鍵值與映照資料之間具有一一映照的關係。map映照容器的資料結構是採用紅黑樹來實現的,插入鍵值的元素不允許重複,比較函式只對元素的鍵值進行比較,元素的各項資料可通過鍵值檢索出來。使用map容器需要標頭檔案包含語句 include map檔案也包含...

c Map容器 詳解

map是c 的乙個標準容器,她提供了很好一對一的關係,在一些程式中建立乙個map可以起到事半功倍的效果,總結了一些map基本簡單實用的操作!1.map最基本的建構函式 mapmapstring mapmapint mapmapstring map char string mapchar mapmap...