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的项删除  
struct   itemstruct 
  { 
            int   a; 
            char   b[20]; 
  }; 
  map<string,   itemstruct   >     mymap. 
  
解答1:
  #include   <iostream> 
  #include   <ctime> 
  #include   <map> 
  using   namespace   std; 
  typedef   struct   itemstruct 
  { 
            int   a; 
            char   b[20]; 
  }itemS; 
  itemS   s[4]   =   {{102,"what"}, 
                          {33,   "hello"}, 
                          {198,"world"}, 
                          {45,   "c++"} 
                      };; 
  
  
  int     main() 
  { 
            map<string,   itemS>     mymap; 
            string   str[4]   =   {"1st","2nd","3rd","4th"}; 
            for(int   i   =   0;   i<4;   i++) 
            { 
                 mymap.insert(make_pair(str[i],   s[i])); 
            } 
            
            map<string,itemS>::iterator   it; 
            for(it=mymap.begin();   it!=mymap.end(); it++) 
            { 
               if(it->second.a >100){ 
                  i=mymap.erase(it);  ----->正确
    mymap.erase(it);     ----->it失效..
        }
            }
  //first是Key, second是value;
            for(it = mymap.begin();  it!=mymap.end(); it++) 
            { 
                          cout<<it->first<<"   "<<it->second.a<<"   "<<it->second.b<<endl; 
            } 
          system("pause"); 
          return   0; 
  }

解答2:
#include<map> 
  #include<iterator> 
  #include<string> 
  #include<iostream> 
  #include<cstring> 
  using   namespace   std; 
  struct   itemstruct 
  { 
            int   a; 
            char   b[20]; 
            itemstruct(int   t,char*str) 
    { 
    a=t; 
    strcpy(b,str); 
    } 
  }; 
  int   main() 
  { 
  map<string,itemstruct>mymap; 
  mymap.insert(make_pair("a",itemstruct(10,"hanzhou"))); 
  mymap.insert(make_pair("ab",itemstruct(20,"fuzhou"))); 
  mymap.insert(make_pair("abc",itemstruct(30,"zhengzhou"))); 
  mymap.insert(make_pair("abcd",itemstruct(200,"wuhan"))); 
  mymap.insert(make_pair("abcde",itemstruct(150,"kunming"))); 
  mymap.insert(make_pair("abcdef",itemstruct(50,"xiamen"))); 
  map<string,itemstruct>::iterator   it=mymap.begin(); 
  while(it!=mymap.end()) 
  { 
  if((it->second).a>100)mymap.erase(it++); 
  else   it++; 
  } 
  it=mymap.begin(); 
  while(it!=mymap.end()) 
  { 
  cout<<it->first<<"   "<<(it->second).a<<"   "<<(it->second).b<<endl; 
  it++; 
  } 
  system("PAUSE"); 
  return   0; 
  }

解答3:
  for(map<string,   itemstruct>::iterator   i   =   mymap.begin();   i   !=   mymap.end();) 
  { 
          if(i->second.a   >   100) 
                  i   =   mymap.erase(i); 
          else 
                  ++i; 
  }

解答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)

http://www.cnblogs.com/anywei/archive/2011/10/27/2226830.html

【转】C++中map容器的说明和使用技巧的更多相关文章

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

    C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 一.map的说明 1 头文件 #include <map> 2 定义 ma ...

  2. C++STL中map容器的说明和使用技巧(杂谈)

    1.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 2.map的功能 自 ...

  3. C++ STL 中 map 容器

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

  4. C++STL库中map容器常用应用

    #include<iostream> #include<cstdio> #include<map> //按键值大小构成二叉搜索树 using namespace s ...

  5. C++使用: C++中map的基本操作和用法

    在阅读SSD代码中发现作者使用了C++中的map方法,因此搜索该关联式容器的使用方法,在这里一并总结. 一.Map 簡介 Map是STL的一個容器,它提供一對一的hash. 第一個可以稱為關鍵字(ke ...

  6. map 容器的使用

    C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 一.map的说明    1   头文件   #include   <map> ...

  7. STL中map与hash_map容器的选择收藏

    这篇文章来自我今天碰到的一个问题,一个朋友问我使用map和hash_map的效率问题,虽然我也了解一些,但是我不敢直接告诉朋友,因为我怕我说错了,通过我查询一些帖子,我这里做一个总结!内容分别来自al ...

  8. c++容器中map的应用

    原文链接:https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关 ...

  9. CSU 1113 Updating a Dictionary(map容器应用)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1113 解题报告:输入两个字符串,第一个是原来的字典,第二个是新字典,字典中的元素的格式为 ...

随机推荐

  1. 13.Python略有小成(装饰器,递归函数)

    Python(装饰器,递归函数) 一.开放封闭原则 ​ 软件面世时,不可能把所有的功能都设计好,再未来的一两年功能会陆续上线,定期更新迭代,软件之前所用的源代码,函数里面的代码以及函数的调用方式一般不 ...

  2. ADO学途 one day

    博主在第一个demo的困苦中,略得一些见解,需要的伙伴可以get下 刚开始先创建一个程序的前端,这样对自己要实现的功能有一个直观的了解.分三 步:首先1.创建一个windows窗体.拖控件使程序接近真 ...

  3. [软件工程基础]Alpha 阶段事后分析

    设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 帮助选修物理实验的学生撰写实验报告,计算实验数据,验证计算结果,并提供一个讨论的平台. 全体成员认 ...

  4. Jenkins+Gitlab+Ansible自动化部署(六)

    Pipeline Job实现Nginix+MySQL+PHP+Wordpress实现自动化部署交付(Jenkins+Gitlab+Ansible自动化部署(五)https://www.cnblogs. ...

  5. B. DZY Loves Modification

    B. DZY Loves Modification time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  6. T-SQL查询处理执行顺序(一)

    对于T-SQL编程,用得最广泛的,莫过于查询(Querying).要想写出高质量.高性能的查询语句,必须深入地了解逻辑查询处理. 一.逻辑查询处理的各个阶段 (5)SELECT DISTINCT TO ...

  7. 在Unity3d中解析Lua脚本的方法

    由于近期项目中提出了热更新的需求,因此本周末在Lua的陪伴下度过.对Lua与Unity3d的搭配使用,仅仅达到了一个初窥门径的程度,记录一二于此.水平有限,欢迎批评指正. 网络上关于Lua脚本和Uni ...

  8. html学习笔记-DOM

    html学习笔记-DOM Table of Contents 1. 什么是 DOM? 2. DOM 节点 3. DOM 方法 4. DOM 属性 5. DOM 访问 6. DOM 修改 7. DOM ...

  9. HDU 3530Subsequence(单调队列)

    题意 题目链接 给出$n$个数,找出最长的区间,使得区间中最大数$-$最小数 $>= m$ 且$<= k$ Sol 考虑维护两个单调队列. 一个维护$1 - i$的最大值,一个维护$1 - ...

  10. dos 删除文件夹 rd

    windows普通方法删除不了文件.文件夹?那么试试dos命令吧. rd的另外一个写法是rmdir,源自ReMakeDirectory.使用的方法也很简单:rd 文件夹名 即可,例如:rd test. ...