分享

向map插入元素的方法(转载)

 社交力学 2012-04-17

STL中的map容器是我经常用的,但是因为map跟别的容器不太一样,每次用的时候对于map中元素的插入方式总是忘却,故而发篇博文,提醒我也提醒所有人map容器的三种插入方式:

 

第一种:用insert函数插入pair数据。下面举例说明:

#include <map>

#include <string>

#include <iostream>

using namespace std;

int main()

{

       map<int, string> mapStudent;

       mapStudent.insert(pair<int, string>(1, "student_one"));

       mapStudent.insert(pair<int, string>(2, "student_two"));

       mapStudent.insert(pair<int, string>(3, "student_three"));

       map<int, string>::iterator  iter;

       for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)

       {

           cout<<iter->first<<" "<<iter->second<<end;

       }

}

第二种:用insert函数插入value_type数据,下面举例说明:

#include <map>

#include <string>

#include <iostream>

using namespace std;

Int main()

{

       map<int, string> mapStudent;

       mapStudent.insert(map<int, string>::value_type (1, "student_one"));

       mapStudent.insert(map<int, string>::value_type (2, "student_two"));

       mapStudent.insert(map<int, string>::value_type (3, "student_three"));

       map<int, string>::iterator  iter;

       for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)

       {

           cout<<iter->first<<" "<<iter->second<<end;

       }

}

第三种:用数组方式插入数据,下面举例说明:

#include <map>

#include <string>

#include <iostream>

using namespace std;

int main()

{

       map<int, string> mapStudent;

       mapStudent[1] =  "student_one";

       mapStudent[2] =  "student_two";

       mapStudent[3] =  "student_three";

       map<int, string>::iterator  iter;

       for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)

       {

            cout<<iter->first<<" "<<iter->second<<end;

       }

}

 

以上三种用法,虽然都可以实现数据的插入,但是它们是有区别的,当然了第一种和第二种在效果上是完成一样的,用insert函数插入数据,在数据的插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是插入数据不了的,但是用数组方式就不同了,它可以覆盖以前该关键字对应的值,用程序说明:

mapStudent.insert(map<int, string>::value_type (1, "student_one"));

mapStudent.insert(map<int, string>::value_type (1, "student_two"));

上面这两条语句执行后,map中1这个关键字对应的值是“student_one”,第二条语句并没有生效,那么这就涉及到我们怎么知道insert语句是否插入成功的问题了,可以用pair来获得是否插入成功,程序如下

pair<map<int, string>::iterator, bool> Insert_Pair;

Insert_Pair = mapStudent.insert(map<int, string>::value_type (1, "student_one"));

我们通过pair的第二个变量来知道是否插入成功,它的第一个变量返回的是一个map的迭代器,如果插入成功的话Insert_Pair.second应该是true的,否则为false。

下面给出完成代码,演示插入成功与否问题:

#include <map>

#include <string>

#include <iostream>

using namespace std;

int main()

{

       map<int, string> mapStudent;

       pair<map<int, string>::iterator, bool> Insert_Pair;

       Insert_Pair = mapStudent.insert(pair<int, string>(1, "student_one"));

       if(Insert_Pair.second == true)

       {

              cout<<"Insert Successfully"<<endl;

       }

       else

       {

              cout<<"Insert Failure"<<endl;

       }

       Insert_Pair = mapStudent.insert(pair<int, string>(1, "student_two"));

       if(Insert_Pair.second == true)

       {

              cout<<"Insert Successfully"<<endl;

       }

       else

       {

              cout<<"Insert Failure"<<endl;

       }

       map<int, string>::iterator  iter;

       for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)

       {

           cout<<iter->first<<" "<<iter->second<<end;

       }

}

大家可以用如下程序,看下用数组插入在数据覆盖上的效果

#include <map>

#include <string>

#include <iostream>

using namespace std;

int main()

{

       map<int, string> mapStudent;

       mapStudent[1] =  "student_one";

       mapStudent[1] =  "student_two";

       mapStudent[2] =  "student_three";

       map<int, string>::iterator  iter;

       for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)

       {

            cout<<iter->first<<" "<<iter->second<<end;

       }

}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多