楼主: fantuanxiaot
28637 184

[编程语言] [C++改编]基于C++的Map容器使用方法 [推广有奖]

回帖奖励 393 个论坛币 回复本帖可获得 3 个论坛币奖励! 每人限 5 次

Ψ▄┳一大卫卍卐席尔瓦

大师

8%

还不是VIP/贵宾

-

威望
7
论坛币
-234475 个
通用积分
124.1424
学术水平
3783 点
热心指数
3819 点
信用等级
3454 点
经验
150207 点
帖子
7546
精华
32
在线时间
1327 小时
注册时间
2013-2-3
最后登录
2022-2-24

初级学术勋章 初级热心勋章 中级热心勋章 中级学术勋章 初级信用勋章 中级信用勋章 高级热心勋章 高级学术勋章 特级学术勋章 特级热心勋章 高级信用勋章 特级信用勋章

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

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

C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple


允许一个键对应多个值。   

一、map的说明   

  1   头文件  

  #include  <map>  

   

  2   定义  

  map<string,   int>  my_Map;  

或者是typedef     map<string,   int>  MY_MAP;  

  MY_MAP  my_Map;  

   

  3   插入数据  

  (1)  my_Map["a"]   =   1;  

  (2)  my_Map.insert(map<string,  int>::value_type("b",2));

  (3)  my_Map.insert(pair<string,int>("c",3));  

  (4)  my_Map.insert(make_pair<string,int>("d",4));  

   

  4   查找数据和修改数据  

  (1)  int   i   =  my_Map["a"];  

            my_Map["a"]   =  i;  

  (2)  MY_MAP::iterator   my_Itr;  

            my_Itr.find("b");  

            int   j  =   my_Itr->second;  

            my_Itr->second   =  j;  

不过注意,键本身是不能被修改的,除非删除。  

   

  5   删除数据  

  (1)  my_Map.erase(my_Itr);  

  (2)  my_Map.erase("c");  

还是注意,第一种情况在迭代期间是不能被删除的,道理和foreach时不能删除元素一样。  

   

  6   迭代数据  

  for  (my_Itr=my_Map.begin();  my_Itr!=my_Map.end();  ++my_Itr)   {}  

   

  7   其它方法  

  my_Map.size()               返回元素数目  

  my_Map.empty()       判断是否为空  

  my_Map.clear()           清空所有元素  

可以直接进行赋值和比较:=,   >,  >=,   <,   <=,  !=   等等  

二/map的举例

要求: 将mymap中itemstruct   的a大于100的项删除  


  1. struct   itemstruct
  2.   {
  3.             int   a;
  4.             char   b[20];
  5.   };
  6.   map<string,   itemstruct   >     mymap.
复制代码


   

解答1:


  1.   #include   <iostream>
  2.   #include   <ctime>
  3.   #include   <map>
  4.   using   namespace   std;
  5.   typedef   struct   itemstruct
  6.   {
  7.             int   a;
  8.             char   b[20];
  9.   }itemS;
  10.   itemS   s[4]   =   {{102,"what"},
  11.                           {33,   "hello"},
  12.                           {198,"world"},
  13.                           {45,   "c++"}
  14.                       };
  15.   int     main()
  16.   {
  17. //   插入
  18.             map<string,   itemS>     mymap;
  19.             string   str[4]   =   {"1st","2nd","3rd","4th"};
  20.             for(int   i   =   0;   i<4;   i++)
  21.             {
  22.                  mymap.insert(make_pair(str[i],   s[i]));
  23.             }
  24. //   迭代器
  25.             map<string,itemS>::iterator   it;
  26.             for(it=mymap.begin();   it!=mymap.end(); it++)
  27.             {
  28.                if(it->second.a >100){
  29.                it=mymap.erase(it);  ----->
  30. //    it指向下一个地址
  31.               mymap.erase(it);     ----->it失效..
  32.             }
  33.             }
  34. //   遍历
  35.   // first是Key, second是value;
  36.             for(it = mymap.begin();  it!=mymap.end(); it++)
  37.             {
  38.                           cout<<it->first<<"   "<<it->second.a<<"   "<<it->second.b<<endl;
  39.             }
  40.           system("pause");
  41.           return   0;
  42.   }
复制代码


解答2:


  1. #include<map>
  2.   #include<iterator>
  3.   #include<string>
  4.   #include<iostream>
  5.   #include<cstring>
  6.   using   namespace   std;
  7.   struct   itemstruct
  8.   {
  9.             int   a;
  10.             char   b[20];
  11. //    构造函数
  12.             itemstruct(int   t,char*str)
  13.     {
  14.     a=t;
  15.     strcpy(b,str);
  16.     }
  17.   };
  18.   int   main()
  19.   {
  20.   map<string,itemstruct>mymap;
  21.   mymap.insert(make_pair("a",itemstruct(10,"hanzhou")));
  22.   mymap.insert(make_pair("ab",itemstruct(20,"fuzhou")));
  23.   mymap.insert(make_pair("abc",itemstruct(30,"zhengzhou")));
  24.   mymap.insert(make_pair("abcd",itemstruct(200,"wuhan")));
  25.   mymap.insert(make_pair("abcde",itemstruct(150,"kunming")));
  26.   mymap.insert(make_pair("abcdef",itemstruct(50,"xiamen")));
  27. //   迭代器
  28.   map<string,itemstruct>::iterator   it=mymap.begin();
  29.   while(it!=mymap.end())
  30.   {
  31.   if((it->second).a>100)    mymap.erase(it++);
  32.   else   it++;
  33.   }
  34.   it=mymap.begin();
  35.   while(it!=mymap.end())
  36.   {
  37.   cout<<it->first<<"   "<<(it->second).a<<"   "<<(it->second).b<<endl;
  38.   it++;
  39.   }
  40.   system("PAUSE");
  41.   return   0;
  42.   }
复制代码
解答3:

  1.   for(map<string,   itemstruct>::iterator   i   =   mymap.begin();   i   !=   mymap.end();)
  2.   {
  3.           if(i->second.a   >   100)
  4.                   i   =   mymap.erase(i);
  5. //   则i 指向下一个
  6.           else
  7.                   ++i;
  8.   }
复制代码


解答4: VC6中编译map编译出错的解决方法

Warnings similarto the following are generated even if you use the warning pragma to disablethe warning:

warning C4786:'std::rb_tree<CAiSpanningTree<State,std::less<State>>::TransClosureNode,

CAiSpanningTree<State,std::less<State>>::TransClosureNode,std::ident<Cai

SpanningTree<State,std::less<State>>::TransClosureNode,CAiSpanningTree<S

tate,std::less<State>>::TransClosureNode>,std::less<CAiSpanningTree<Stat

e,std::less<State>>::TransClosureNode>>': identifier was truncated to '255' characters in the debug information


解决code 加在stdafx.h的头文件处:

   #pragma warning(disable:4786)


具体代码:

本帖隐藏的内容

C _Map_H_的使用方法II.pdf (181.98 KB)


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Map Multiple foreach include insert multiple include 技巧

回帖推荐

ydb8848 发表于23楼  查看完整内容

hkmonte 发表于16楼  查看完整内容

支持楼主~~~

Crsky7 发表于14楼  查看完整内容

C++果真是底层语言
已有 5 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
xddlovejiao1314 + 100 + 100 + 5 + 5 + 5 精彩帖子
niuniuyiwan + 60 + 60 + 5 + 5 + 5 精彩帖子
zbin7451f + 100 + 5 + 5 + 5 精彩帖子
henry_l + 100 + 100 大赞
Nicolle + 20 + 1 + 1 精彩帖子

总评分: 经验 + 380  论坛币 + 260  学术水平 + 16  热心指数 + 16  信用等级 + 15   查看全部评分

本帖被以下文库推荐

沙发
condmn 发表于 2015-5-16 08:58:10 |只看作者 |坛友微信交流群

回帖奖励 +3 个论坛币

已有 1 人评分论坛币 收起 理由
xddlovejiao1314 + 5 鼓励积极发帖讨论

总评分: 论坛币 + 5   查看全部评分

使用道具

藤椅
condmn 发表于 2015-5-16 08:59:02 |只看作者 |坛友微信交流群

回帖奖励 +3 个论坛币

已有 1 人评分论坛币 收起 理由
xddlovejiao1314 + 5 鼓励积极发帖讨论

总评分: 论坛币 + 5   查看全部评分

使用道具

板凳
condmn 发表于 2015-5-16 08:59:52 |只看作者 |坛友微信交流群

回帖奖励 +3 个论坛币

已有 1 人评分论坛币 收起 理由
xddlovejiao1314 + 5 鼓励积极发帖讨论

总评分: 论坛币 + 5   查看全部评分

使用道具

报纸
condmn 发表于 2015-5-16 09:00:26 |只看作者 |坛友微信交流群

回帖奖励 +3 个论坛币

已有 1 人评分论坛币 收起 理由
xddlovejiao1314 + 5 鼓励积极发帖讨论

总评分: 论坛币 + 5   查看全部评分

使用道具

地板
condmn 发表于 2015-5-16 09:01:28 |只看作者 |坛友微信交流群

回帖奖励 +3 个论坛币

已有 1 人评分论坛币 收起 理由
xddlovejiao1314 + 5 鼓励积极发帖讨论

总评分: 论坛币 + 5   查看全部评分

使用道具

7
aasa11 发表于 2015-5-16 09:25:47 |只看作者 |坛友微信交流群

回帖奖励 +3 个论坛币

看看~~
已有 1 人评分论坛币 收起 理由
xddlovejiao1314 + 5 鼓励积极发帖讨论

总评分: 论坛币 + 5   查看全部评分

使用道具

8
rrjj101022 发表于 2015-5-16 09:41:52 |只看作者 |坛友微信交流群

回帖奖励 +3 个论坛币

顶起~~~
已有 1 人评分论坛币 收起 理由
xddlovejiao1314 + 5 鼓励积极发帖讨论

总评分: 论坛币 + 5   查看全部评分

使用道具

9
rrjj101022 发表于 2015-5-16 09:43:48 |只看作者 |坛友微信交流群

回帖奖励 +3 个论坛币

谢谢楼主~~~
已有 1 人评分论坛币 收起 理由
xddlovejiao1314 + 5 鼓励积极发帖讨论

总评分: 论坛币 + 5   查看全部评分

使用道具

10
rrjj101022 发表于 2015-5-16 09:45:43 |只看作者 |坛友微信交流群

回帖奖励 +3 个论坛币

继续顶起~~~
已有 1 人评分论坛币 收起 理由
xddlovejiao1314 + 5 鼓励积极发帖讨论

总评分: 论坛币 + 5   查看全部评分

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 04:29