商務英語計算機英語

c語言map的用法

本文已影響 1.91W人 

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

padding-bottom: 121.44%;">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) rt(pair("c",3));

(3)rt(make_pair("d",4));

三、修改和查詢資料

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

(2)查詢資料 用(key); 可以通過鍵來查。

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

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

四、刪除元素

(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的用法

系統怎樣使用終端編寫c語言程式

3.c語言學習心得6篇

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

5.c語言using的用法

6.c語言中怎麼畫圖

猜你喜歡

熱點閱讀

最新文章

推薦閱讀