记录下吧,虽然这些资料也能查到,我就记录我自己用得最顺手的方式就可以了,反正我的需求就是,我自己不可能往map里面插入重复的元素,因为我的object id是变化的且唯一的,然后我需要查找和插入,和成功删除,以及可能要知道是否插入成功那就ok了,一下就是我自己试验的一段代码:
#pragma region test_zone map<string,string> mymap; mymap.insert(pair<string, string>("obj_1", "alice")); mymap.insert(pair<string, string>("obj_2", "bob")); mymap.insert(make_pair("obj_3", "allen")); pair<map<string, string>::iterator, bool> test_pair; test_pair = mymap.insert(make_pair("obj_4", "jeremy")); if(test_pair.second == true) { cout << "successfully inserted the value :" << test_pair.first->second << endl; } else { cout << "Insertion failed!" << endl; } if (mymap.count("obj_1") > 0) { cout << mymap["obj_1"] << endl; } map<string,string>::iterator it = mymap.find("obj_3"); if(it != mymap.end()) { cout << it->second << endl; } cin >> forcin; #pragma endregion test_zone
当然是要加入#include <map>的,然后这里显示的就是一些插入方式,对于查找的时候,貌似有两种方法,我看到有人说用count要比用find要慢,因为要查找多一次,我自己没证实过,先摆这,但是find的方式的话就要临时声明多一个迭代器,略麻烦,count的方式很有趣,因为map里面是不可能存在相同的key值的,所以count这个函数的返回值就在1和0之间取,所以1就代表有,0就代表没。还有,make_pair是系统自带的函数,还挺不错的,比直接在insert中声明pair<string ,string>这样的方式简洁多了。
下面那个test pair是判断是否插入成功的方法,如果是用数组的方式来插入的话,是会抹掉原本的值的,所以这个肯定是会返回插入成功的,而如果是一直用insert的方法来插入的话,那么对于以前如果已经存在了这样的一个key,那么bool的变量会会返回一个false,所以这个或许可以用于update掉一块数据的时候的做法,比如:
mymap["obj_3"] = "new_allen"; map<string,string>::iterator it2 = mymap.find("obj_3"); if(it2 != mymap.end()) { cout << it2->second << endl; }
这个时候再取出key为”obj_3"的时候就变成了new_allen。
ok,暂时那么多,遍历什么的貌似还不需要到。