在C++標準中,STL被組織爲下面的13個頭文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。
map常用成員(關聯容器)----創建map<主鍵,主鍵對應的值>,增insert,刪erase,改查找find,然後修改second,遍歷iterator,獲取元素個數size,判空empty
map是STL的一個關聯容器,它提供一對一(第一個字段爲關鍵字,每個關鍵字只能在map中出現一次,第二個字段稱爲該關鍵字的值)的數據處理能力,由於這個特性
map內部的實現自建一顆紅黑樹(一種非嚴格意義上的平衡二叉樹),這顆樹具有對數據自動排序的功能。
頭文件::
#include <iostream>
#include <map>
using namespace std;
創建map對象::
map<int ,string> object; //map<主鍵,主鍵對應的值>
注意:
在map<key,value>類型中對key的要求:
因爲map內部的實現採用的是一顆紅黑樹(類似平衡二叉樹),所以,它要按照key值比較大小(弱排序),所以,對key類型的唯一要求是,它必須支持<操作,至於是否支持其他的關係或相等元算,不做要求。
例如:: 我們定義了一個類作爲Key,那麼必須讓它支持<操作,否則是不可以的。
增 insert 數組方式object[key_value] = value;
創建map的成員::
方法一、插入value_type
map<int,string>::value_type value(1,"billchen");
object.insert(value);
也可以用 value.insert(map<int,string>::value_type(1,"billchen"));作用是一樣的。
方法二、插入pair或make_pair數據
map<int,string> object;
object.insert(pair<int,string>(1,"billchen"));
或者
object.insert(make_pair(1,"billchen"));
/*
其中pair是一個模板pair<T1,T2> pvalue(v1,v2);表示創建一個pair對象,
v1和v2的類型是T1和T2,值是v1和v2。
可以取出v1和v2的值,
分別是pvalue.first 爲 v1
pvalue.second 爲 v2
*/
/*
其中make_pair(v1,v2);表示以v1,v2創建一個新的pair對象,類型是v1和v2的類型。
一般用在map的insert方法中,創建臨時對象。
*/
方法三、數組方式
map<int,string> object;
object[1]="billchen"; //object[key_value]=value; (在key值對應的空間填寫數據)
刪 erase clear
刪除map中的一個元素,使用erase
方法一、通過迭代器刪除
map<int,string>::iterator iter = object.find(key);
if(iter != object.end())
{
object.erase(iter);
}
方法二、通過key值刪除
object.erase(key); //刪除成功,返回1,刪除失敗,返回0
刪除map中的一段,如迭代器iter_begin到iter_end的元素:
iter_begin = object.find(key_value1);
iter_end = object.find(key_value2);
if(iter_begin != object.end() && iter_end != object.end())
{
object.erase(iter_begin,iter_end);
}
刪除所有元素使用erase:
方法一、使用迭代器,遍歷刪除
map<int,string>::iterator iter=object.begin();
while(iter!=object.end())
{
object.erase(iter++); //這樣做,是爲了防止迭代器失效。
}
方法二、調用clear接口
object.clear();
改 (修改map中成員的值)
修改map中成員的值(迭代器):
map<int,string>::iterator iter = object.find(key);
iter->second="wang";
修改map中成員的值(數組方式):
map[key] = "wang";
例如:
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main(int argc,char *argv[])
{
int i;
map<char,string> obj;
map<char,string>::value_type mem1('a',"billchen");
obj.insert(mem1);
map<char,string>::iterator iter = obj.begin();
while(iter != obj.end()) //修改
{
iter->second="wang";
iter++;
}
iter=obj.begin();
while(iter != obj.end()) //遍歷
{
cout << iter->first << endl;
cout << iter->second << endl;
iter++;
}
return 0;
}
查 find
查找使用find(主鍵);
object.find(主鍵);
返回值爲iterator(迭代器),
if(object.find(主鍵) == object.end())
{
cout << "沒有找到" <<endl;
}
遍歷
遍歷方法1: 通過迭代器
map<int,string>::iterator iter=object.begin();
while(iter!=object.end())
{
cout<<iter->first<<iter->second等等<<endl;
iter++;
}
適當的情況下,可以使用數組的方式來進行map的遍歷。
獲取map中成員的個數 size()
獲取map中元素的個數:
map<int,string> obj;
map<int,string>::value_type mem1(1,"billchen");
map<int,string>::value_type mem2(2,"chenbaihu");
obj.insert(mem1);
obj.insert(mem2);
cout << obj.size() <<endl;
判斷map是否爲空,使用empty
爲空,返回true,不爲空,返回false;