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
(2) 或者是:typedef map
Mymap Map;
二、插入數據
插入數據之前先說一下pair 和 make_pair 的用法
pair是一個結構體,有first和second 兩個域,可以直接訪問
1 string key="sunquan";
2 int value=123456;
3 pair
4 cout<
而make_pair是返回一個pair <類型,類型> 的數據,eg:make_pair("asa",123456); 不過還得找個pair
下面步入正題:
(1) Map["abc"]=1;
(2) rt(pair
(3)rt(make_pair
三、修改和查找數據
(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語言中怎麼畫圖