map 是一种关联容器,  提供一对一的关联, 关联的形式为: KEY----VALUE     关键字不重复。multimap与map类似,但是允许关键字重复

即:关键字和与之对应的值

关键字起到索引的作用, 在map中查找记录 就是根据关键字查找

关键字  和 值 可以是任意类型

map 也可看做是  关键字映射的集合, 即,map中不可出现重复的关键字,每条映射的关键字都是不同的。

map 是基于红黑树结构的,其查找时间为LOG(N)

如:

map<int, int >               //第一个为关键字,第二个为此关键字所对应的值     一个关键字只对应一个值, 是一对一的映射关系

map<CString,int>

map<int, CString>

map<CString,CString>

........

头文件

  1. #include <map>
  2. using namespace std;  //必须加上

1 插入元素

1)  insert函数插入

  1. map<int,int> idMap;
  2. idMap.insert(pair<int,int>(1,1));
  3. idMap.insert(map<int,int>::value_type(2,1));

   用insert函数插入数据,在数据的插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是插入数据不了的

判断是否插入成功

  1. map<int,int> idMap;
  2. idMap.insert(pair<int,int>(1,1));
  3. idMap.insert(map<int,int>::value_type(2,1));
  4. pair<map<int,int>::iterator,bool> InsertPair;
  5. InsertPair=idMap.insert (pair<int,int>(1,1));
  6. if (InsertPair.second==true)
  7. {
  8. cout<<"insert successfully";
  9. }else
  10. cout<<"insert failure";

  2 )数组插入方式

  1. map<int,int> idMap;
  2. idMap[1]=2;

用数组方式就不同了,它可以覆盖以前该关键字对应的值

但存在一个性能的问题。该方法会将每个插入值都赋为缺省值,然后再赋为显示的值,如果元素是类对象,则开销比较大。而用insert方法则可直接赋值为显示值。

2 判断是否存在

Returns the number of elements in a map whose key matches a parameter-specified key.

 
size_type count(
const Key&
_Key
) const

1 if the map contains an element whose sort key matches the parameter key; 0 if the map does not contain an element with a matching key.

  1. int num=idMap.count(1);
  2. if (num==0)
  3. {
  4. cout<<"the key 1 does not exist";
  5. }else{
  6. cout<<"exist";
  7. }

3 查找关键字

iterator find(
const Key&
_Key
);
const_iterator find(
const Key&
_Key
) const;
  1. map<int,int>::iterator it;
  2. it=idMap.find(2);
  3. if (it==idMap.end())
  4. {
  5. cout<<"can not find 2";
  6. }else{
  7. int first=it->first;
  8. int second=it->second;
  9. }

扩展:

 
iterator lower_bound(
const Key&
_Key
);
const_iterator lower_bound(
const Key&
_Key
) const;

Returns an iterator to the first element in a map with a key value that is equal to or greater than that of a specified key.

第一个等于或大于Key的元素

 
iterator upper_bound(
const Key&
_Key
);
const_iterator upper_bound(
const Key&
_Key
) const;

Returns an iterator to the first element in a map that with a key having a value that is greater than that of a specified key.

第一个大于Key的元素

 
pair <const_iterator, const_iterator> equal_range (
const Key&
_Key
) const;
pair <iterator, iterator> equal_range (
const Key&
_Key
);

A pair of iterators such that the first is the lower_bound of the key and the second is the upper_bound of the key.

Equal_range函数返回一个pair,pair里面第一个变量是Lower_bound返回的迭代器,pair里面第二个迭代器是Upper_bound返回的迭代器,如果这两个迭代器相等的话,则说明map中不出现这个关键字

  1. p2 = m1.equal_range( 4 );
  2. // If no match is found for the key,
  3. // both elements of the pair return end( )
  4. if ( ( p2.first == m1.end( ) ) && ( p2.second == m1.end( ) ) )
  5. cout << "The map m1 doesn't have an element "
  6. << "with a key less than 40." << endl;
  7. else
  8. cout << "The element of map m1 with a key >= 40 is: "
  9. << p2.first -> first << "." << endl;

 

4 大小,包含多少个元素

Returns the number of elements in the map.

 
size_type size( ) const;
  1. int nSize=idMap.size();

5 遍历

前向迭代器

  1. map<int,int>::iterator it;
  2. for (it=idMap.begin ();it!=idMap.end();it++)
  3. {
  4. cout<<it->first<<endl;
  5. cout<<it->second<<endl;
  6. }

反向迭代器

  1. map<int,int>::reverse_iterator iter;
  2. for (iter=idMap.rbegin ();iter!=idMap.rend ();iter++)
  3. {
  4. cout<<iter->first<<endl;
  5. cout<<iter->second<<endl;
  6. }


6 删除

iterator erase(
iterator
_Where
);
iterator erase(
iterator
_First,
iterator
_Last
);
size_type erase(
const key_type&
_Key
);
  1. //迭代器删除
  2. map<int,int>::iterator it;
  3. it=idMap.find(1);
  4. idMap.erase(it);
  5. //关键字删除
  6. idMap.erase(1);
  7. //成片删除 或清空
  8. idMap.erase(idMap.begin (),idMap.end());
  9. //清空
  10. idMap.clear ();

7 基本函数

  1. C++ Maps是一种关联式容器,包含“关键字/值”对
  2. begin()          返回指向map头部的迭代器
  3. clear()         删除所有元素
  4. count()          返回指定元素出现的次数
  5. empty()          如果map为空则返回true
  6. end()            返回指向map末尾的迭代器
  7. equal_range()    返回特殊条目的迭代器对
  8. erase()          删除一个元素
  9. find()           查找一个元素
  10. get_allocator()  返回map的配置器
  11. insert()         插入元素
  12. key_comp()       返回比较元素key的函数
  13. lower_bound()    返回键值>=给定元素的第一个位置
  14. max_size()       返回可以容纳的最大元素个数
  15. rbegin()         返回一个指向map尾部的逆向迭代器
  16. rend()           返回一个指向map头部的逆向迭代器
  17. size()           返回map中元素的个数
  18. swap()            交换两个map
  19. upper_bound()     返回键值>给定元素的第一个位置
  20. value_comp()      返回比较元素value的函数

示例:

  1. map<int,vector<int>>  m_DianmingMap;
    1. AddDianmingMap(int nXueqi,int nXuehao)
    2. {
    3. //将此学生添加到已点名容器中
    4. map<int,vector<int>>::iterator it;
    5. it=m_DianmingMap.find(nXueqi);
    6. if (it==m_DianmingMap.end ()) //先查找关键字有无此学期ID
    7. {
    8. //容器中不存在 则添加
    9. vector<int>  int_Vec;
    10. int_Vec.push_back(nXuehao);
    11. m_DianmingMap[nXueqi]=int_Vec;
    12. }else{//在查找 此学期中 有无此学号ID
    13. vector<int>::iterator itVec=find(it->second.begin (),it->second.end(),m_nXuehaoID);
    14. if(itVec==it->second.end())
    15. {
    16. //没有此学生则添加
    17. it->second.push_back(nXuehao);
    18. }
    19. }
    20. return TRUE;
    21. }

map 用法的更多相关文章

  1. Collection List Set和Map用法与区别

    labels:Collection List Set和Map用法与区别 java 散列表 集合 Collection           接 口的接口      对 象的集合   ├   List   ...

  2. ES6中Set 和 Map用法

    JS中Set与Map用法 一.Set 1.基本用法 ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. ...

  3. sort函数(cmp)、map用法---------------Tju_Oj_2312Help Me with the Game

    这道题里主要学习了sort函数.sort的cmp函数写法.C++的map用法(其实和数组一样) Your task is to read a picture of a chessboard posit ...

  4. C++中的STL中map用法详解(转)

    原文地址: https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html C++中的STL中map用法详解   Map是STL的一个关联容器,它提供 ...

  5. C++:map用法及元素的默认值

    C++:map用法 一.map基本用法 键值对 第一个参数为键的类型,第二个参数为值的类型. 源代码 #include <iostream> #include <string> ...

  6. c++ STL map 用法

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

  7. std::map用法

    STL是标准C++系统的一组模板类,使用STL模板类最大的好处就是在各种C++编译器上都通用.    在STL模板类中,用于线性数据存储管理的类主要有vector, list, map 等等.本文主要 ...

  8. STL map 用法

    首先make_pair Pairs C++标准程序库中凡是"必须返回两个值"的函数, 也都会利用pair对象  class pair可以将两个值视为一个单元.容器类别map和mul ...

  9. map用法详解

    转自:http://www.kuqin.com/cpluspluslib/20071231/3265.html Map是 STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在 ...

  10. UVA11995【I can guess the data structrue!!】【水】+UVA11991【map用法】

    先看UVA11995 两份代码一份直接用C写的,一份用STL写的 #include <iostream> #include <stdio.h> #include <str ...

随机推荐

  1. linux句柄泄露问题查看

    背景: 我们在开发linux在线server的时候常常会遇会句柄泄露的问题.由于在linux系统设计里面遵循一切都是文件的原则.即磁盘文件.文件夹.网络套接字.磁盘.管道等,全部这些都是文件.在我们进 ...

  2. Java集合类汇总记录--JDK篇

    接口类图 Java Collection由两套并行的接口组成,一套是Collection接口,一套是Map接口.例如以下图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkb ...

  3. HDU 1018 Big Number (log函数求数的位数)

    Problem Description In many applications very large integers numbers are required. Some of these app ...

  4. HDU 5411 CRB and puzzle (Dp + 矩阵高速幂)

    CRB and Puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) T ...

  5. Oracle中长度为0字符串与null等价

    不试不知道,Oracle中,长度为0的字符串'' 居然与null等价! 众所周知,null代表空,什么都不存在,而一个字符串'',虽然长度为0,但毕竟已经是一个字符串,二者怎么能等价,混为一谈呢. 在 ...

  6. struts2开发中一些概念的理解

    对象关系映射(orm)中的两个概念 VO 和 PO: 它们都包含一些属性及这些属性的get/set方法 1.VO:是值对象,可以理解为业务对象,存活在业务层,供业务逻辑使用,当前业务逻辑需要一组什么数 ...

  7. mongodb配置主从模式

    Mongodb的replication主要有两种:主从和副本集(replica set).主从的原理和mysql类似,主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己 ...

  8. mongodb AND查询遇到多个index时候可能会做交集——和复合索引不同

    关于MongoDB中索引文档的一个问题? - To illustrate index intersection, consider a collection orders that has the f ...

  9. ZOJ 3955 Saddle Point 校赛 一道计数题

    ZOJ3955 题意是这样的 给定一个n*m的整数矩阵 n和m均小于1000 对这个矩阵删去任意行和列后剩余一个矩阵为M{x1,x2,,,,xm;y1,y2,,,,,yn}表示删除任意的M行N列 对于 ...

  10. IJ:Eclipse快捷键大全

    ylbtech-IJ:Eclipse快捷键大全 1.返回顶部 1. Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加 ...