刚刚学习了C++的map用法,略囧

  记录下吧,虽然这些资料也能查到,我就记录我自己用得最顺手的方式就可以了,反正我的需求就是,我自己不可能往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,暂时那么多,遍历什么的貌似还不需要到。

posted @ 2014-03-22 09:57  Allen_Tung  阅读(224)  评论(0编辑  收藏  举报