C++中map的使用詳解說明
一、定義
(1) map<string, int> Map;
(2) 或者是:typedef map<string,int> Mymap;
Mymap Map;
二、插入資料
插入資料之前先說一下pair 和 make_pair 的用法
pair是一個結構體,有first和second 兩個域,可以直接訪問
1 string key="sunquan"; 2 int value=123456; 3 pair <string,int> b(key, value);//這裡 pair <string,string>是資料型別,後面是調帶參構造方法 4 cout<<b.first<<endl;
而make_pair是返回一個pair <型別,型別> 的資料,eg:make_pair("asa",123456); 不過還得找個pair <string,int>型別的變數來接受返回值。
下面步入正題:
(1) Map["abc"]=1;
(2) Map.insert(pair<string,int>("c",3));
(3)Map.insert(make_pair<string,int>("d",4));
三、修改和查詢資料
(1)修改Map["sunquan"]=11111;
(2)查詢資料 用Map.find(key); 可以通過鍵來查。
切記不要用int value=Map[key];這樣會在Map中增加這個key,而value就是預設值(int 為0,string為空字串)。
通過方法(2),會返回迭代器的地址,key不存在的話迭代器的值為Map.end();
四、刪除元素
(1)通過key刪除;
(2)通過迭代器來刪除;
下面看一下詳細的程式碼:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <map> 6 using namespace std; 7 8 int main() 9 { 10 map<string,int> Map; 11 map<string,int> ::iterator it; 12 Map.insert(pair<string,int>("root",12)); 13 Map.insert(pair<string,int>("scot",11)); 14 for(it=Map.begin();it!=Map.end();it++) 15 cout<<it->first<<" "<<it->second<<endl; 16 it=Map.begin(); 17 Map.erase(it);//通過迭代器刪除 18 string key="root"; 19 Map.erase(key);//通過key刪除 20 21 Map.erase(Map.begin(),Map.end());//一個迭代器,到另一個迭代器 22 //相當於 Map.clear(); 23 24 for(it=Map.begin();it!=Map.end();it++) 25 cout<<it->first<<" "<<it->second<<endl; 26 return 0; 27 }
注:
map<int, string>::iterator it 是宣告一個 迭代器
map<int, string> it 是 宣告一個map容器
五、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的函式
專案需要,map的使用詳解來自部落格之家
鍵值對 匹配
1 標頭檔案
#include <map>
2、map的功能
自動建立Key - value的對應。key 和 value可以是任意你需要的型別。
根據key值快速查詢記錄,查詢的複雜度基本是Log(N),如果有1000個記錄,最多查詢10次,1,000,000個記錄,最多查詢20次。
快速插入Key - Value 記錄。
快速刪除記錄
根據Key 修改value記錄。
遍歷所有記錄。
3,
map的建構函式
map共提供了6個建構函式,這塊涉及到記憶體分配器這些東西,略過不表,在下面我們將接觸到一些map的構造方法,這裡要說下的就是,我們通常用如下方法構造一個map:
Map<int, string> mapStudent;
定義
map<string, int> my_Map;
或者是typedef map<string, int> MY_MAP;
MY_MAP my_Map;
4, 插入資料
(1) my_Map["a"] = 1;
改變map中的條目非常簡單,因為map類已經對[]操作符進行了過載
enumMap[1] = "One";
enumMap[2] = "Two";
.....
這樣非常直觀,但存在一個效能的問題。插入2時,先在enumMap中查詢主鍵為2的項,沒發現,然後將一個新的物件插入enumMap,鍵是2,值是一個空字串,插入完成後,將字串賦為"Two"; 該方法會將每個值都賦為預設值,然後再賦為顯示的值,如果元素是類物件,則開銷比較大。我們可以用以下方法來避免開銷:
enumMap.insert(map<int, CString> :: value_type(2, "Two"))
(2) my_Map.insert(map<string, int>::value_type("b",2));
(3) my_Map.insert(pair<string,int>("c",3));
(4) my_Map.insert(make_pair<string,int>("d",4));
note : 如果相同元素放入到map中就是操作失敗,此處可應用於看看map中是否有此元素,插入判斷,防止程式碼實現功能錯誤
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 {
//找到
}
6, 迭代資料
for (my_Itr=my_Map.begin(); my_Itr!=my_Map.end(); ++my_Itr) {}
7,map的大小
在往map裡面插入了資料,我們怎麼知道當前已經插入了多少資料呢,可以用size函式,用法如下:
Int nSize = mapStudent.size();
8,,資料的清空與判空
清空map中的資料可以用clear()函式,判定map中是否有資料可以用empty()函式,它返回true則說明是空map
9,
//如果要刪除1,用迭代器刪除
map<int, string>::iterator iter;
iter = mapStudent.find(1);
mapStudent.erase(iter);
//如果要刪除1,用關鍵字刪除
Int n = mapStudent.erase(1);//如果刪除了會返回1,否則返回0
//用迭代器,成片的刪除
//一下程式碼把整個map清空
mapStudent.earse(mapStudent.begin(), mapStudent.end());
//成片刪除要注意的是,也是STL的特性,刪除區間是一個前閉後開的集
相關文章
- php中var_dump()函式的詳解說明PHP函式
- C++ 中各種map的使用C++
- 詳解object detection中的mAPObject
- nginx 詳解 – 詳細配置說明Nginx
- nginx 詳解 - 詳細配置說明Nginx
- winscp操作說明,winscp操作說明的詳細解讀
- JavaScript中 Map 物件詳解JavaScript物件
- STL中map用法詳解
- Emacs詳細使用說明(轉)Mac
- Flask-Limit使用詳細說明FlaskMIT
- CocoaPods | iOS詳細使用說明iOS
- C++檔案說明及使用方法C++
- Spring的@Qualifier註解使用說明Spring
- Solon 框架詳解(十一)- Solon Cloud 的配置說明框架Cloud
- php中的var_dump()方法的詳細說明PHP
- R語言-Knitr包的詳細使用說明R語言
- C++中map的常用方法C++
- Qt/C++編寫的mqtt除錯助手使用說明QTC++MQ除錯
- C++ STL:std::unorderd_map 物理結構詳解C++
- casperjs中的open()和thenOpen()使用說明JS
- Oracle RAC中Srvctl命令詳細說明(轉)Oracle
- 使用說明
- java中finalkeyword使用說明Java
- AndroidAnnotation常用註解使用說明Android
- Intellij IDEA 使用svn非常詳細的說明IntelliJIdea
- C++中的容器類詳解C++
- php中curl的詳細解說PHP
- mydumper備份資料庫詳解(已詳細說明)資料庫
- C++ 字串使用詳解C++字串
- 前端meta標籤內容定義及使用說明,meta詳細說明,meta標籤使用前端
- Thread interrupt() 執行緒中斷的詳細說明thread執行緒
- AutoMapper在ABP框架中的使用說明APP框架
- session的詳細說明和用法Session
- JiaoZiVideoPlayer使用說明(持續更新中...)IDE
- Vue元件中prop屬性使用說明Vue元件
- mysql processlist詳細說明MySql
- linux系統vi命令詳細使用說明Linux
- C++ 訪問說明符詳解:封裝資料,控制訪問,提升安全性C++封裝