給map容器添加元素可通過兩種方式實現(xiàn):
1.通過insert成員函數(shù)實現(xiàn)。
2.通過下標(biāo)操作符獲取元素,然后給獲取的元素賦值。 map對象的訪問可通過下標(biāo)和迭代器兩種方式實現(xiàn):
3.map的下標(biāo)是鍵,返回的是特定鍵所關(guān)聯(lián)的值六剥。
4.使用迭代器訪問晚顷,iter->first指向元素的鍵,iter->second指向鍵對應(yīng)的值疗疟。 使用下標(biāo)訪問map容器與使用下標(biāo)訪問vector的行為截然不同:用下標(biāo)訪問map中不存在的元素將導(dǎo)致在map容器中添加一個新的元素该默,這個元素的鍵即為該下標(biāo)值,鍵所對應(yīng)的值為空策彤。
————————————————————————————————
map的基本操作函數(shù):
???? C++?maps是一種關(guān)聯(lián)式容器栓袖,包含“關(guān)鍵字/值”對
?????begin()?????????返回指向map頭部的迭代器
?????clear()????????刪除所有元素
?????count()?????????返回指定元素出現(xiàn)的次數(shù)
?????empty()?????????如果map為空則返回true
?????end()???????????返回指向map末尾的迭代器
?????equal_range()???返回特殊條目的迭代器對
?????erase()?????????刪除一個元素
?????find()??????????查找一個元素
?????get_allocator()?返回map的配置器
?????insert()????????插入元素
?????key_comp()??????返回比較元素key的函數(shù)
?????lower_bound()???返回鍵值>=給定元素的第一個位置
?????max_size()??????返回可以容納的最大元素個數(shù)
?????rbegin()????????返回一個指向map尾部的逆向迭代器
?????rend()??????????返回一個指向map頭部的逆向迭代器
?????size()??????????返回map中元素的個數(shù)
?????swap()???????????交換兩個map
?????upper_bound()????返回鍵值>給定元素的第一個位置
?????value_comp()?????返回比較元素value的函數(shù)
————————————————————————————————
#include<map>
map<key, value> m;//創(chuàng)建一個名為m的空map對象,其鍵和值的類型分別為key和value店诗。
map<key, value> m(m2);//創(chuàng)建m2的副本m裹刮,m與m2必須有相同的鍵類型和值類型。
map<key, value> m(b,e);//創(chuàng)建map類型的對象m庞瘸,存儲迭代器b和e標(biāo)記的范圍內(nèi)所有元素的副本捧弃,元素的類型必須能轉(zhuǎn)換為pair
//查
m.count(k);// 返回m中鍵值等于k的元素的個數(shù)。
m.find(k);// 如果m中存在按k索引的元素擦囊,則返回指向該元素的迭代器违霞。如果不存在,則返回結(jié)束游標(biāo)end()瞬场。
//刪
//迭代器刪除
iter = m.find("123");
m.erase(iter);
//用關(guān)鍵字刪除
int n = m.erase("123"); //如果刪除了會返回1买鸽,否則返回0
//用迭代器范圍刪除 : 把整個map清空
m.erase(m.begin(), m.end());
//等同于m.clear()
m.erase(k); // 刪除m中鍵為k的元素,返回size_type類型的值贯被,表示刪除元素的個數(shù)眼五。
m.erase(p);? // 從m中刪除迭代器p所指向的元素妆艘,p必須指向m中確實存在的元素,而且不能等于m.end()弹砚,返回void類型双仍。
m.erase(iterator first, iterator last);? // 刪除一個范圍,返回void類型桌吃。
//插入
// 第一種 用insert函數(shù)插入pair
m.insert(pair<int, string>(000, "student_zero"));
// 第二種 用insert函數(shù)插入value_type數(shù)據(jù)
m.insert(map<int, string>::value_type(001, "student_one"));
// 第三種 用"array"方式插入
m[123] = "student_first";
m[456] = "student_second";
m.insert(e) ;
e是一個用在m上的value_type類型的值朱沃。如果鍵e.first不在m中,則插入一個值為e.second的新元素茅诱;如果該鍵在m中已存在逗物,那么不進行任何操作。該函數(shù)返回一個pair類型對象瑟俭,包含指向鍵為e.first的元素的map迭代器翎卓,以及一個bool類型的對象,表示是否插入了該元素摆寄。
m.insert(beg, end);
beg和end是標(biāo)記元素范圍的迭代器失暴,對于該范圍內(nèi)的所有元素,如果它的鍵在m中不存在微饥,則將該鍵及其關(guān)聯(lián)的值插入到m逗扒。 返回void類型。
m.insert(iter, e);
e是value_type類型的值欠橘,如果e.first不在m中矩肩,則創(chuàng)建新元素,并以迭代器iter為起點搜索新元素存儲的位置肃续,返回一個迭代器黍檩,指向m中具有給定鍵的元素。 在添加新的map元素時始锚,使用insert成員可避免使用下標(biāo)操作符帶來的副作用:不必要的初始化刽酱。
//在往map里面插入了數(shù)據(jù),我們怎么知道當(dāng)前已經(jīng)插入了多少數(shù)據(jù)呢瞧捌,可以用size函數(shù)肛跌,用法如下:
int nSize = mapStudent.size();