stl中的map容器是我經常用的,但是因為map跟別的容器不太一樣,每次用的時候對於map中元素的插入方式總是忘卻,故而發篇博文,提醒我也提醒所有人map容器的三種插入方式:
第一種:用insert函式插入pair資料。下面舉例說明:
#include
#include
#include
using namespace std;
int main()
}第二種:用insert函式插入value_type資料,下面舉例說明:
#include
#include
#include
using namespace std;
int main()
}第三種:用陣列方式插入資料,下面舉例說明:
#include
#include
#include
using namespace std;
int main()}
以上三種用法,雖然都可以實現資料的插入,但是它們是有區別的,當然了第一種和第二種在效果上是完成一樣的,用insert函式插入資料,在資料的插入上涉及到集合的唯一性這個概念,即當map中有這個關鍵字時,insert操作是插入資料不了的,但是用陣列方式就不同了,它可以覆蓋以前該關鍵字對應的值,用程式說明:
mapstudent.insert(map::value_type (1, "student_one"));
mapstudent.insert(map::value_type (1, "student_two"));
上面這兩條語句執行後,map中1這個關鍵字對應的值是「student_one」,第二條語句並沒有生效,那麼這就涉及到我們怎麼知道insert語句是否插入成功的問題了,可以用pair來獲得是否插入成功,程式如下
pair::iterator, bool> insert_pair;
insert_pair = mapstudent.insert(map::value_type (1, "student_one"));
我們通過pair的第二個變數來知道是否插入成功,它的第乙個變數返回的是乙個map的迭代器,如果插入成功的話insert_pair.second應該是true的,否則為false。
下面給出完成**,演示插入成功與否問題:
#include
#include
#include
using namespace std;
int main()
else
insert_pair = mapstudent.insert(pair(1, "student_two"));
if(insert_pair.second == true)
else
map::iterator iter;
for(iter = mapstudent.begin(); iter != mapstudent.end(); iter++) }
大家可以用如下程式,看下用陣列插入在資料覆蓋上的效果
#include
#include
#include
using namespace std;
int main()
}
stl 向容器中插入元素
描述 構造插入迭代器,可以通過該迭代器對容器插入元素。函式定義 template class container std insert iterator inserter container c,typename container iterator i template class contain...
STL中map與hash map容器的選擇
實際上這個問題不光c 會遇到,其他所有語言的標準容器的實現及選擇上都是要考慮的。做應用程式你可能覺得影響不大,但是寫演算法或者核心 就要小心了。今天改進 順便又來溫習基礎功課了。還記得herb sutter那極有味道的 c 對話系列 麼,在其中 產生真正的hash物件 這個故事裡就講了map的選擇。...
STL中的關聯式容器 map(對映)
map,即 對映 map是關聯容器的一種,具體實現採用了紅黑樹的平衡二叉樹的資料結構。它提供一對一 其中第乙個稱為關鍵字key,每個關鍵字只能在map 現一次,第二個稱為該關鍵字的值value 的資料處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。由於是利用...