C++ map

原创 2017年01月03日 20:19:18

c++ map学习

一.map简介

map是一类关联式容器,模板类。其增加和删除节点对迭代器影响很小,不能修改其key,但可以修改其value。

二.map常用定义

map< string , int >mapstring;         map< int ,string >mapint;

map< string, char>mapstring; map< char ,string>mapchar;
map< char ,int>mapchar; map< int ,char >mapint;

三.map添加

1.使用下标操作符获取元素,然后给元素赋值
map< string, int> word_count;
word_count[“Anna”] = 1;
map< char,char> c2d;
c2d[‘A’]=’2’;
使用下标访问map与使用下标访问数组或者vector的行为是截然不同的:使用下标访问不存在的元素将导致在map容器中添加一个新的元素,他的键即为该下标值。
2.map容器提供的insert操作:

      1. map.insert(e) : e是一个用在map中的value_type类型的值。如果键不存在,则插入一个值为e.second的新元素;如果键在map中已经存在,那么不进行任何操作。该函数返回一个pair类型,该pair类型的first元素为当前插入e的map迭代器,pair的second类型是一个bool类型,表示是否插入了该元素。

      2. map.insert(beg, end) : beg和end是迭代器,返回void类型

      3. map.insert(iter, e) : e是value_type类型的值,如果e.first不在map中,则创建新元素,并以迭代器iter为起点搜索新元素存储的位置,返回一个迭代器,指向map中具有给定键的元素。

word_count.insert(map< string, int>::value_type(“Anna”, 1)); word_count.insert(make_pair(“Anna”, 1));
返回值:如果该键已在容器中,则其关联的值保持不变,返回的bool值为true。

四.查找并获取map中的元素

  1. find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。
    map< int ,string >::iterator l_it;;
    l_it=maplive.find(112);
    if(l_it==maplive.end())
    cout<<”we do not find 112” << endl;
    else cout<<”wo find 112”<< endl;
    通过map对象的方法获取的iterator数据类型是一个std::pair对象,包括两个数据 iterator->first 和 iterator->second 分别代表关键字和存储的数据
    1. map.count(k) : 返回map中键k的出现次数(对于map而言,由于一个key对应一个value,因此返回只有0和1,因此可以用此函数判断k是否在map中)

五.删除map中的元素

移除某个map中某个条目用erase()

该成员方法的定义如下

iterator erase(iterator it); //通过一个条目对象删除
iterator erase(iterator first, iterator last); //删除一个范围
size_type erase(const Key& key); //通过关键字删除
clear()就相当于 enumMap.erase(enumMap.begin(), enumMap.end());

六.map中的迭代

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

七.map的基本操作函数:

  C++ Maps是一种关联式容器,包含“关键字/值”对
  begin()          返回指向map头部的迭代器
  clear()         删除所有元素
  count()          返回指定元素出现的次数
  empty()          如果map为空则返回true
  end()            返回指向map末尾的迭代器
  equal_range()    返回特殊条目的迭代器对
  erase()          删除一个元素
  find()           查找一个元素
  get_allocator()  返回map的配置器
  insert()         插入元素
  key_comp()       返回比较元素key的函数
  lower_bound()    返回键值>=给定元素的第一个位置
  max_size()       返回可以容纳的最大元素个数
  rbegin()         返回一个指向map尾部的逆向迭代器
  rend()           返回一个指向map头部的逆向迭代器
  size()           返回map中元素的个数
  swap()            交换两个map
  upper_bound()     返回键值>给定元素的第一个位置
  value_comp()      返回比较元素value的函数
   可以直接进行赋值和比较:=,   >,   >=,   <,   <=,   !=   等等

八.multimap

//multimap允许重复的键值插入容器  
//        **********************************************************        
//        * pair只包含一对数值:pair<int,char>                       *  
//        * map是一个集合类型,永远保持排好序的,                   *  
//  pair  * map每一个成员就是一个pair,例如:map<int,char>           *  
//        * map的insert()可以把一个pair对象作为map的参数,例如map<p> *  
//        ***********************************************************  
#pragma warning(disable:4786)  
#include<map>  
#include<iostream>  
using namespace std;  

int main(void)  
{  
 multimap<int,char*> m;  
 //multimap的插入只能用insert()不能用数组  
 m.insert(pair<int,char*>(1,"apple"));  
    m.insert(pair<int,char*>(1,"pear"));//apple和pear的价钱完全有可能是一样的  
 m.insert(pair<int,char*>(2,"banana"));  
 //multimap的遍历只能用迭代器方式不能用数组  
 cout<<"***************************************"<<endl;  
 multimap<int,char*>::iterator i,iend;  
 iend=m.end();  
 for(i=m.begin();i!=iend;i++)  
 {  
  cout<<(*i).second<<"的价钱是"  
   <<(*i).first<<"元/斤\n";  
 }  
 cout<<"***************************************"<<endl;  
    //元素的反相遍历  
 multimap<int,char*>::reverse_iterator j,jend;  
 jend=m.rend();  
 for(j=m.rbegin();j!=jend;j++)  
 {  
  cout<<(*j).second<<"的价钱是"  
   <<(*j).first<<"元/斤\n";  
 }  
 cout<<"***************************************"<<endl;  
 //元素的搜索find(),pair<iterator,iterator>equal_range(const key_type &k)const  
    //和multiset的用法一样  
 multimap<int,char*>::iterator s;  
 s=m.find(1);//find()只要找到一个就行了,然后立即返回。  
 cout<<(*s).second<<"    "  
  <<(*s).first<<endl;  
 cout<<"键值等于1的元素个数是:"<<m.count(1)<<endl;  
 cout<<"***************************************"<<endl;  
 //删除 erase(),clear()  
 m.erase(1);  
    for(i=m.begin();i!=iend;i++)  
 {  
  cout<<(*i).second<<"的价钱是"  
   <<(*i).first<<"元/斤\n";  
 }  
    return 0;  
}  

相关文章推荐

c/c++ stl_map

  • 2011年06月30日 10:15
  • 232KB
  • 下载

c++ map 的基本用法

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

用C模访写一个c++ map

  • 2014年05月14日 21:32
  • 90KB
  • 下载

C++ Map的实例使用说明

  • 2013年10月06日 11:47
  • 4KB
  • 下载

C++中map的键为结构体

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

全 C++ map 的用法

  • 2012年08月18日 12:58
  • 36KB
  • 下载

C++_中的map容器.pdf

  • 2013年11月15日 13:13
  • 303KB
  • 下载

c++中map的基本用法和嵌套用法

C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值。本文主要总结一下map基本用法和嵌套用法示例。...

C++哈希表使用的好文章-Hash_Map

  • 2010年05月17日 12:38
  • 39KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ map
举报原因:
原因补充:

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