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

一、map的说明  
  1   头文件

  1. #include <map>

2   定义

  1. map<string, int> my_Map;

或者是

  1. typedef map<string, int> MY_MAP;
  2. MY_MAP my_Map;

3   插入数据

  1. () my_Map["a"] = ;
  2. () my_Map.insert(map<string, int>::value_type("b",));
  3. () my_Map.insert(pair<string, int>("c",));
  4. () my_Map.insert(make_pair<string, int>("d",));

4   查找数据和修改数据

  1. () int i = my_Map["a"];
  2. my_Map["a"] = i;
  3. () MY_MAP::iterator my_Itr;
  4. my_Itr.find("b");
  5. int j = my_Itr->second;
  6. my_Itr->second = j;

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

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

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

6   迭代数据

  1. for(my_Itr = my_Map.begin(); my_Itr != my_Map.end(); ++my_Itr)
  2. {
  3. ……
  4. }

7   其它方法

  1. my_Map.size() //返回元素数目
  2. my_Map.empty() //判断是否为空
  3. my_Map.clear() //清空所有元素

可以直接进行赋值和比较:=,   >,   >=,   <,   <=,   !=   等等,更高级的应用查帮助去吧,^_^;

二、map的举例

要求: 将mymap中itemstruct   的a大于100的项删除  
struct itemstruct 
  { 
            int a; 
            char b[20]; 
  }; 
  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[];
  9. }itemS;
  10. itemS s[] = {{,"what"},
  11. {, "hello"},
  12. {,"world"},
  13. {, "c++"}
  14. };;
  15. int main()
  16. {
  17.   map<string, itemS> mymap;
  18.   string str[] = {"1st","2nd","3rd","4th"};
  19.   for(int i = ; i < ; i++)
  20.   {
  21.   mymap.insert(make_pair(str[i], s[i]));
  22. }
  23.  
  24.   map<string, itemS>::iterator it;
  25.   for(it = mymap.begin(); it != mymap.end(); it++)
  26.   {
  27.   if(it->second.a > )
          {
  28.     i = mymap.erase(it); ----->正确
  29.      mymap.erase(it); ----->it失效..
  30.   }
  31. }
  32.    //first是Key, second是value;
  33. for(it = mymap.begin(); it != mymap.end(); it++)
  34. {
  35.   cout<<it->first<<" "<<it->second.a<<" "<<it->second.b<<endl;
  36. }
  37. system("pause");
  38. return ;
  39. }

解答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[];
  11. itemstruct(int t, char* str)
  12. {
  13. a = t;
  14. strcpy(b, str);
  15. }
  16. };
  17. int main()
  18. {
  19. map<string,itemstruct> mymap;
  20. mymap.insert(make_pair("a", itemstruct(,"hanzhou")));
  21. mymap.insert(make_pair("ab", itemstruct(,"fuzhou")));
       mymap.insert(make_pair("abc", itemstruct(,"zhengzhou")));
  22. mymap.insert(make_pair("abcd", itemstruct(,"wuhan")));
       mymap.insert(make_pair("abcde", itemstruct(,"kunming")));
  23. mymap.insert(make_pair("abcdef", itemstruct(,"xiamen")));
  24. map<string,itemstruct>::iterator it = mymap.begin();
  25. while(it != mymap.end())
  26. {
  27. if((it->second).a > )
  28. mymap.erase(it++);
  29. else
  30. it++;
  31. }
  32. it = mymap.begin();
  33. while(it != mymap.end())
  34. {
  35. cout<<it->first<<" "<<(it->second).a<<" "<<(it->second).b<<endl;
  36. it++;
  37. }
  38. system("PAUSE");
  39. return ;
  40. }

解答3:

  1. for(map<string, itemstruct>::iterator i = mymap.begin(); i != mymap.end();)
  2. {
  3. if(i->second.a > )
  4. i = mymap.erase(i);
  5. else
  6. ++i;
  7. }

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

Warnings similar to the following are generated even if you use the warning pragma to disable the 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)

STL学习 - map的更多相关文章

  1. map--C++ STL 学习

    map–C++ STL 学习   Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力.   说下map内 ...

  2. STL的pair学习, map学习

    http://blog.csdn.net/calvin_zcx/article/details/6072286 http://www.linuxidc.com/Linux/2014-10/107621 ...

  3. STL学习:STL库vector、string、set、map用法

    本文仅介绍了如何使用它们常用的方法. vector 1.可随机访问,可在尾部插入元素:2.内存自动管理:3.头文件#include <vector> 1.创建vector对象 一维: (1 ...

  4. 侯捷STL学习(九)--关联式容器(Rb_tree,set,map)

    layout: post title: 侯捷STL学习(九) date: 2017-07-21 tag: 侯捷STL --- 第十九节 容器rb_tree Red-Black tree是自平衡二叉搜索 ...

  5. 侯捷STL学习(十)--容器hashtable探索(unordered set/map)

    layout: post title: 侯捷STL学习(十) date: 2017-07-23 tag: 侯捷STL --- 第二十三节 容器hashtable探索 hashtable冲突(碰撞)处理 ...

  6. STL学习小结

    STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合,这些" ...

  7. 标准模板库(STL)学习探究之stack

    标准模板库(STL)学习探究之stack queue priority_queue list map/multimap dequeue string

  8. ###STL学习--vector

    点击查看Evernote原文. #@author: gr #@date: 2014-08-11 #@email: forgerui@gmail.com vector的相关问题.<stl学习> ...

  9. ###STL学习--关联容器

    点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的关联容器. ###stl学习 |--迭 ...

随机推荐

  1. java的VO和PO的用途

    最近在搞一个项目,用到了 springMVC,加深了我对VO和PO的理解,有感而发. 1 写在之前的提示 VO == Value Object PO == Persistant Object VO对应 ...

  2. Struts2文件下载找不到输入流异常

    先发异常 Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack. Check ...

  3. Smart_Script

    target_type Name Value target_param1 target_param2 target_param3 target_x target_y target_z target_o ...

  4. visual studio 的Error List 显示乱码

    复制到右键菜单如下: Severity Code Description Project File LineError 閿欒: 绋嬪簭鍖卌om.baidu.lbsapi.auth涓嶅瓨鍦? com. ...

  5. js中十进制数转换为16进制

    使用 Number类的 toString()方法: var num = 255; console.log(num.toString(16));//输出FF

  6. word使用技巧-批量删除图片技巧

    通过查找替换方法:ctrl+h,查找输入^g,替换输入空,然后替换即可. 今天看到一同事写的文档,发现里面很多word基础功能都不会用,比如同一级的标题居然有好几个样式,并且会级别搞错:列表里的数字居 ...

  7. asp.net 设置网页过期

    /// <summary> /// 判断网页是否过期 /// </summary> /// <returns></returns> private bo ...

  8. Google副总裁的管理经验

    一.拥挤其实是创新.拥挤喧闹的工作环境会引燃更多的创意火花.办公室应该充满能量和互动,而不是条块分割和等级分化. 二.战略和策略并举.许多人不懂得战略和策略的区别,或者他们认为自己只需要其中一样,其实 ...

  9. kvm

    硬件,os,内核模块,用户空间工具,命令行具体参数,日志 [root@localhost ~]# yum install pciutils [root@localhost ~]# lscpu;lspc ...

  10. 在Mac上使用vim的几个命令

    Mac上面编辑文件的命令总是记不住,留一个参考!!! 如果是vim,则:Esc 退出编辑模式,输入以下命令: :wq  保存后退出vi,若为 :wq! 则为强制储存后退出(常用) :w    保存但不 ...