生活随笔
收集整理的這篇文章主要介紹了
c++中的map容器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
map/multimap基本概念
Map的特性是,所有元素都會根據元素的鍵值自動排序。Map所有的元素都是pair,同時擁有實值和鍵值,pair的第一元素被視為鍵值,第二元素被視為實值,map不允許兩個元素有相同的鍵值我們可以通過map的i迭代器改變mao的鍵值嗎?答案是不行,因為map的鍵值關系到map元素的排列規則,任意改變map鍵值會嚴重破壞map的組織,如果想要修改元素的實值,是可以的Map和list擁有相同的某些性質,當對它的容器元素進行新增操作或者刪除操作時,操作之前的所有迭代器,在操作完成之后依然有效,當然被刪除的那個元素的迭代器必然是個例外Multimap和map的操作類似,唯一區別multimap的鍵值可以重復map和multimap都是以紅黑樹為底層實現機制
map 對象的拷貝構造與賦值
map(constmap&mp); //拷貝構造函數map&operator=(constmap&mp); //重載等號操作符map.swap(mp); //交換兩個集合容器
map 的大小操作
map.size();//返回容器中元素的數目map.empty();//判斷容器是否為空
map 的刪除操作
map.clear(); //刪除所有元素 ? map.erase(pos);//刪除 pos 迭代器所指的元素,返回下一個元素的迭代器。map.erase(beg,end); //刪除區間[beg,end)的所有元素 ,返回下一個元素的迭代器。map.erase(keyElem); //刪除容器中 key 為 keyElem 的對組。
void test02(){map
<int, int>m
;m
.insert(pair
<int, int>(1, 10));m
.insert(make_pair(2, 20));m
.insert(map
<int, int>::value_type(3, 30));m
[4] = 40;m
.erase(1);for (map
<int, int >::iterator it
= m
.begin(); it
!= m
.end(); it
++){cout
<< "key=" << it
->first
<< "value" << it
->second
<< endl
;}map
<int,int>::iterator pos
=m
.find(2);if (pos
!= m
.end()){cout
<< "找到,key值為:" << pos
->first
<< "value" << pos
->second
<< endl
;}else{cout
<< "未找到" << endl
;}int num
=m
.count(3);cout
<< "num=" << num
<< endl
;map
<int, int>::iterator ret
= m
.lower_bound(3);if (ret
!= m
.end()){cout
<< "lower_bound中key" << ret
->first
<< "value" << ret
->second
<< endl
;}else{cout
<< "未找到" << endl
;}ret
= m
.upper_bound(3);if (ret
!= m
.end()){cout
<< "upper_bound中key" << ret
->first
<< "value" << ret
->second
<< endl
;}else{cout
<< "未找到" << endl
;}pair
<map
<int,int>::iterator
,map
<int,int>::iterator
>ret2
= m
.equal_range(3);if (ret2
.first
!= m
.end()){cout
<< "找到了equal_range中的lower_bound的key" << ret2
.first
->first
<< "value" << ret2
.first
->second
<< endl
;}else{cout
<< "未找到" << endl
;}if (ret2
.second
!= m
.end()){cout
<< "找到了equal_range中的upper_bound的key" << ret2
.second
->first
<< "value" << ret2
.second
->second
<< endl
;}else{cout
<< "未找到" << endl
;}}
map 的查找操作
map.find(key); 查找鍵 key 是否存在,若存在,返回該鍵的元素的迭代器;若不存 在,返回 map.end();map.count(keyElem); //返回容器中 key 為 keyElem 的對組個數。對 map 來說,要 么是 0,要么是 1。對 multimap 來說,值可能大于 1。
map 的插入與迭代器
map.insert(…); //往容器插入元素,返回 pair<iterator,bool>在 map 中插入元素的三種方式: 假設 map<int,string>mapStu;通過 pair 的方式插入對象 mapStu.insert( pair<int,string>(3,“小張”) );通過 pair 的方式插入對象 mapStu.inset(make_pair(-1,“校長-1”));通過 value_type 的方式插入對象 mapStu.insert( map<int,string>::value_type(1,“小李”) );通過數組的方式插入值 mapStu[3]=“小劉"; mapStu[5]=“小王";
void test01(){map
<int, int>m
;m
.insert(pair
<int, int>(1, 10));m
.insert(make_pair(2, 20));m
.insert(map
<int, int>::value_type(3, 30));m
[4] = 40;for (map
<int, int >::iterator it
= m
.begin(); it
!= m
.end(); it
++){cout
<< "key=" << it
->first
<< "value" << it
->second
<< endl
;}if (m
.empty()){cout
<< "空" << endl
;}else{cout
<< "size=" << m
.size() << endl
;}}
注意
前三種方法,采用的是 insert()方法,該方法返回值為 pair<iterator,bool>第四種方法非常直觀,但存在一個性能的問題。插入 3 時,先在 mapStu 中查找主 鍵為 3 的項,若沒發現,則將一個鍵為 3,值為初始化值的對組插入到 mapStu 中, 然后再將值修改成“小劉”。若發現已存在 3 這個鍵,則修改這個鍵對應的 valuestringstrName=mapStu[2]; //取操作或插入操作只有當 mapStu 存在 2 這個鍵時才是正確的取操作,否則會自動插入一個實例,鍵 為 2,值為初始化值。
class myCompare{public:bool operator()(int v1
, int v2
){return v1
> v2
;}};void test03(){map
<int, int,myCompare
>m
;m
.insert(pair
<int, int>(1, 10));m
.insert(make_pair(2, 20));m
.insert(map
<int, int>::value_type(3, 30));m
[4] = 40;for (map
<int, int, myCompare
>::iterator it
= m
.begin(); it
!= m
.end(); it
++){cout
<< "key:" << it
->first
<< "value:" << it
->second
<< endl
;}}
總結
以上是生活随笔為你收集整理的c++中的map容器的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。