C++中map容器的使用说明

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

一.map的说明

1.头文件

#include<map.h>

2.定义方法

(1)map<string,int> m;

(2)typedef map<string,int> M;

M m;

3.插入数据

(1)m[‘a‘] = 1

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

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

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

4.查找数据和修改数据

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

m["a"] = i;

(2)m::iterator m_iter;

m.find("b");

int j = m_iter->second;

m_iter->second = j;

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

5.删除数据

(1)m.erase(m_iter);

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

!!!注意!!! 第一种情况在迭代期间是不能被删除的

6   迭代数据

for   (m_iter=m.begin();   m_iter!=m.end();   ++m_iter)

{

}

7   其它方法

m.size()          返回元素数目

m.empty()       判断是否为空

m.clear()         清空所有元素

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

二map的举例

<span style="font-size:18px;">要求: 将mymap中itemstruct的a大于100的项删除
struct itemstruct
{
     int a;
     char b[20];
};
map<string,itemstruct> mymap;</span>

代码1:

<span style="font-size:18px;">#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;
}
</span>

代码2:

<span style="font-size:18px;">#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; 

 }</span>

代码3:

<span style="font-size:18px;">for(map<string,   itemstruct>::iterator   i   =   mymap.begin();   i   !=   mymap.end();)
{
    if(i->second.a   >   100)
       i   =   mymap.erase(i);
    else
       ++i;
} </span>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-30 04:13:19

C++中map容器的使用说明的相关文章

【转】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["

STL中map容器使用自定义key类型报错详解

引言 STL的map容器中,key的类型是不是随意的呢? 实践 编写测试代码 定义一个结构体来试试: struct a { char* pName; int m_a; }; map<a, int> mp; a a1; a1.m_a = 100; a1.pName = "a1"; a a2; a2.m_a = 200; a2.pName = "a2"; mp.insert(std::make_pair(a1, 1)); mp.insert(std::mak

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

#include<iostream> #include<cstdio> #include<map> //按键值大小构成二叉搜索树 using namespace std; map<int, string> a; int main() { a.insert(map<int, string>::value_type(1,"li")); a.insert(map<int, string>::value_type(1,&q

C++中map的基本操作和用法

在阅读SSD代码中发现作者使用了C++中的map方法,因此搜索该关联式容器的使用方法,在这里一并总结. 一.Map 簡介 Map是STL的一個容器,它提供一對一的hash. 第一個可以稱為關鍵字(key),每個關鍵字只能在map中出現一次, 第二個可能稱為該關鍵字的值(value) Map以模板(泛型)方式實現,可以儲存任意類型的變數,包括使用者自定義的資料型態.Map主要用於資料一對一映射(one-to-one)的情況,map內部的實現自建一顆紅黑樹,這顆樹具有對數據自動排序的功能.比如一個班

STL中map与hash_map容器的选择

[转]STL中map与hash_map容器的选择 先看看alvin_lee 朋友做的解析,我觉得还是很正确的,从算法角度阐述了他们之间的问题! 实际上这个问题不光C++会遇到,其他所有语言的标准容器的实现及选择上都是要考虑的.做应用程序你可能觉得影响不大,但是写算法或者核心代码就要小心了.今天改进代码,顺便又来温习基础功课了. 还记得Herb Sutter那极有味道的<C++对话系列>么,在其中<产生真正的hash对象>这个故事里就讲了map的选择.顺便回顾一下,也讲一下我在实用中

C++ STL中Map的按Key排序和按Value排序

原文  http://blog.csdn.net/iicy266/article/details/11906189 map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择. 我们这样定义,map<string, int>,其中学生姓名用string类型,作为Key:该学生的成绩用int类型,作为value.这样一来,我们可以根据学

HDU 1113 Word Amalgamation (map 容器 + string容器)

http://acm.hdu.edu.cn/showproblem.php?pid=1113 Problem Description In millions of newspapers across the United States there is a word game called Jumble. The object of this game is to solve a riddle, but in order to find the letters that appear in th

C语言 &#183; C++中map的用法详解

转载自:http://blog.csdn.net/sunquana/article/details/12576729 一.定义   (1) map<string,   int>   Map;     (2) 或者是:typedef   map<string,int>   Mymap;                       Mymap   Map; 二.插入数据  插入数据之前先说一下pair 和 make_pair 的用法pair是一个结构体,有first和second 两个

STL中map的用法

map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处. 下面举例说明什么是一对一的数据映射.比如一个班级中,每个学生的学号跟他的姓名就存在着一一