實際上,用下標操作符把map 初始化至一組元素集合,會使每個值都被初始化為缺省值
,然后再被賦值為顯式的值,如果元素是類對象,而且它的缺省初始化和賦值的運算量都很大,
就會影響程序的性能,盡管不會影響程序的正確性。
?map<string,int> mymap;
?mymap["hou"]=0;
?mymap["hua"]=1;
?mymap["liang"]=2;
?mymap.insert(map<string,int>::value_type("nihao",3));//盡量使用這種方式。
?cout<<mymap["nihao"]<<endl;
?mymap.insert(map<string,int>::value_type("nihao",4));
?? cout<<mymap["nihao"]<<endl;----依舊輸出3,這說明如果已經有了一個鍵值,是不能再輸入的。
?? cout<<mymap.count("nihao")<<endl;---輸出1,實際上只會有0和1這兩種可能。
但是只有當map 中存在這樣一個鍵的實例時,該代碼才會表現正常。如果不存在這樣的實例,使用下標操作符會引起插入一個實例。
?? int count=mymap.count("hou");
?? if(count!=0)、、只有得到count不是0時,才可以安全操作。
??? cout<<mymap["hou"]<<endl;
?? map<string,int>::iterator ite=mymap.find("hou");
?? if(ite!=mymap.end())
??? cout<<(*ite).first<<"----"<<(*ite).second<<endl;
?cout<<mymap["ri"]<<endl;----注意,map里沒有ri這個鍵值,因此會增加一個。