STL中map容器的元素插入

转载 2012年03月24日 11:29:15

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



STL中map容器用法总结

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候...
  • nothinglefttosay
  • nothinglefttosay
  • 2014年11月17日 18:45
  • 888

C++ STL 中 map 容器的说明和使用技巧

Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!    1、map简介 map是一类关联...
  • u014552726
  • u014552726
  • 2014年07月22日 10:04
  • 8805

c++ map容器的元素插入

第一种:用insert函数插入pair数据。下面举例说明: #include #include #include using namespace std; int main() { ...
  • qq_31457873
  • qq_31457873
  • 2015年10月05日 21:39
  • 238

stl std::map容器排序及使用注意事项

#include "stdafx.h" #include #include int _tmain(int argc, _TCHAR* argv[]) { /** * map中的每个元素都是...
  • analogous_love
  • analogous_love
  • 2014年11月05日 12:44
  • 3936

STL学习之map容器(3)

map::find iterator find ( const key_type& x ); const iterator find( const key_type& x) const; 获取...
  • richerg85
  • richerg85
  • 2012年06月24日 10:32
  • 7133

c++ stl中map容器的基本用法

std map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能 力,由于这个特性,它完成有可能在我们处理一对一...
  • zzuchengming
  • zzuchengming
  • 2016年03月17日 15:31
  • 840

STL中的map容器

一、关于map的介绍 map是STL的一个容器,和set一样,map也是一种关联式容器。它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数...
  • zhang_sinner
  • zhang_sinner
  • 2015年02月09日 23:01
  • 314

Java中Map容器的遍历方法

Java中Map容器的遍历方法 Map map = new HashMap();//取map中的键for (String key : map.keySet()) { System.out.pri...
  • ysp_0607
  • ysp_0607
  • 2016年08月21日 16:35
  • 972

Java Map容器小示例

Map容器:键值对(Key-Value);关联数组。 Map里面的key和value都可以是任意的对象,比如Integer,或者一个很复杂的类对象。 Java里面的Map都封装得比较好了,所以使用...
  • Lv_Victor
  • Lv_Victor
  • 2016年08月09日 23:28
  • 604

VC6++中Map嵌套Set/Vector等容器

背景因为公司的编译环境是VC++6.0, 古老的编译器,我用的不太习惯,于是就使用vs2013,在对map嵌套时,2013与VC6.0出现了异常 内容代码是这样的: map stlNest;对...
  • a312024054
  • a312024054
  • 2016年05月23日 17:09
  • 1518
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STL中map容器的元素插入
举报原因:
原因补充:

(最多只允许输入30个字)