关闭

STL中map容器的元素插入

239人阅读 评论(0) 收藏 举报

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;

       }

}


http://blog.sina.com.cn/s/blog_616694280100f4lu.html



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:69062次
    • 积分:1070
    • 等级:
    • 排名:千里之外
    • 原创:39篇
    • 转载:26篇
    • 译文:1篇
    • 评论:3条
    最新评论