实际上,用下标操作符把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这个键值,因此会增加一个。