给出了map的基本用法如插入、查找、删除、遍历等等,同时告诉你如何实现双键map,包括

(1) 只有两个键都匹配才命中目标
(2) 两个键中任意一个匹配就命中目标

可以扩展到多键

(一) 介绍特点:1.map将Key的object和T的Object绑定到一起,因此是一种Pair Associative Container, 表示其value type为 pair。2.它同时也是Unique Associative Container,表示没有两个元素具有相同的Key。3.它还是一种Sorted Associative Container,因此第三个参数只能是less,greater之类的functor, 相比较而言,  hash table是 equal_to, not_equal_to之类的functor。
(二) 基本用法通过以下范例,可以看出map的一些基本用法: 插入、查找、删除、遍历等等。/* 这个是MS的bug,看着心烦,屏蔽掉警告 */#if defined (_MSC_VER)#pragma warning(disable: 4786)#endif#include <iostream>#include <map>#include <algorithm>int main(int argc, char *argv[]){     /* define a map */     std::map _map;

     /* insert */     _map.insert( std::map::value_type(0, 32.8) );     _map.insert( std::map::value_type(1, 33.2) );     _map.insert( std::map::value_type(2, 35.8) );     _map.insert( std::map::value_type(3, 36.4) );     _map.insert( std::map::value_type(4, 37.8) );     _map.insert( std::map::value_type(5, 35.8) );

     /* 这个是常用的一种map赋值方法 */     _map[7] = 245.3;

     /* find by key */     std::map::iterator itr;     itr = _map.find(4);

     if( itr != _map.end() )     {         std::cout  << "Item:"  << itr->first << " found, content: " << itr->second << std::endl;     }

     std::cout  << std::endl;

     /* delete item from map */     if( itr != _map.end() )     {         _map.erase(itr);     }

     /* travel through a map */     std::map::iterator itr1  =  _map.begin();     for(  ;  itr1  !=  _map.end();  ++itr1 )     {         std::cout  << "Item:"  << itr1->first << ", content: " << itr1->second << std::endl;     }

     std::cout  << std::endl;

     /* empty a map */     _map.clear();

     return 0;}
(三) 当Key是结构时该如何定义结构比如 Key是结构MyStruct类型, 此时map可以定义如下:std::map > _map;其中Compare 缺省是std::less,这里可以不写,自定义的结构必须实现Compare指定的比较操作,因此自定义结构MyStruct必须按照如下写法:
struct MyStruct{     int key;

     bool operator < ( const MyStruct rhs) const    {         return key < rhs.key;    }};当然也可以实现全局operator <bool operator < ( const MyStruct lhs, const MyStruct rhs) {     return lhs.key < rhs.key;}
另外,当Compare 是std::greater时,需要实现 operator >
(四) 如何实现两个Key的map, 只有两个Key都匹配才命中目标可以定义结构MyStruct如下:struct MyStruct{     int key1;     double key2

     bool operator < ( const MyStruct rhs) const    {         /* 两个key必须都匹配才命中 */         return ( key1 < rhs.key1 || key2 < rhs.key2 );    }};
(五) 如何实现两个Key的map, 两个Key中任意一个匹配就命中目标可以定义结构MyStruct如下:struct MyStruct{     int key1;     double key2

     bool operator < ( const MyStruct rhs) const    {         /* 两个key任意一个匹配就命中 */         return ( ( key1 < rhs.key1 || (key1 > rhs.key1 && key2 < rhs.key2 ) ) && ( key2 < rhs.key2 )  );    }};
(六) 如果被存储的T允许重复,可用multimap
(七) 如果Key本身就是需要被存储的T, 只要将map换成set就好了

转载于:https://www.cnblogs.com/shenyanyun/archive/2010/05/19/1739308.html

std::map用法总结相关推荐

  1. std::map用法

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

  2. c++中std::map简介及find用法

    目录 一.map简介 二.map的功能 1.快速插入Key -Value 记录. 2.快速删除记录 3.根据Key 修改value记录. 4.遍历所有记录. 三.使用map 四. map的构造函数 五 ...

  3. std::map char*做key

    用 char*作为std::map中的key 网上的用法: 声明map时需要添加一个cmp比较函数,不然map在比较时,使用char *的指针进行比较,而不是比较char字符串. [cpp] view ...

  4. C++ Map用法详解

    用法汇总 insert 插入一个元素 size 获得map中元素的个数 max_size 获得map所能容纳的元素个数 count 判断是否存在某个key,存在为返回1 find 查找某个key er ...

  5. 使用map的find头文件_C++ map用法

    C++ 中 map 提供的是一种键值对容器,里面的数据都是成对出现的,如下图:每一对中的第一个值称之为关键字(key),每个关键字只能在 map 中出现一次:第二个称之为该关键字的对应值.在一些程序中 ...

  6. Go程序:演示map用法

    Go程序:演示map用法 在C++/Java中,map一般都以库的方式提供,比如在C++中是STL的std::map<>,在C#中是 Dictionary<>,在Java中是H ...

  7. C++ map用法总结(整理)

    1,map简介 map是STL的一个关联容器,它提供一对一的hash. 第一个可以称为关键字(key),每个关键字只能在map中出现一次: 第二个可能称为该关键字的值(value): map以模板(泛 ...

  8. 转: std::string用法详解

    原文地址为: 转: std::string用法详解  C++中的string 类 简单介绍 前言: string 的角色 1 string 使用 1.1 充分使用string 操作符 1.2 眼花缭乱 ...

  9. 关于STL中的map用法

      STL中map用法详解         std map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力, ...

最新文章

  1. 1357篇ECCV 2020论文打包下载!奖项公布:李飞飞高徒获最佳论文奖
  2. org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19
  3. R语言计算dataframe数据列中各分类的计数(类似pandas value_counts函数功能)
  4. verilog编译指令
  5. 面试:说说Java 中堆和栈的区别?
  6. hive 配置参数说明
  7. tensorflow 之 最近用到的几个小操作tf.reshape,tf.convert_to_tensor,tf.where
  8. silverlight中数据绑定讲解
  9. checkbox ajax 不选中的值,php – 无法通过ajax传递checkbox的值
  10. 人工智能的炒作_为什么人工智能被过度炒作?
  11. 川大 计算机 博士 毕业要求,川大酝酿新规:博士生毕业不能直接当讲师
  12. Linux: mv, rename单次及批次修改档案名称及后缀(批量修改文件名)
  13. 利用Python爬虫刷新某网站访问量
  14. [Editor][003][Emacs] 从零到高级的进阶 - 实践开发 - emacs tutorial的使用和基本导航键
  15. Flink WriteRedis
  16. 正则表达式 IP域名
  17. java 好用的 schedule_Java用Timer schedule搞定定时职务
  18. linux 0.11 返回用户侧,iPhone 11 11 Pro 用户必备教程:重启手机,恢复模式,DFU模式...
  19. NLP知识包--语义分析-语义角色标注
  20. 人脸检测进阶:使用 dlib、OpenCV 和 Python 检测眼睛、鼻子、嘴唇和下巴等面部五官

热门文章

  1. Spring MVC中使用 Swagger2 构建Restful API
  2. Toast源码深度分析
  3. Java多线程并发学习-进阶大纲
  4. xor方程组消元 UVA 11542 Square
  5. Java知多少(68)面向字符的输出流
  6. Exchange Server 2013日记功能
  7. 在asp.net中备份还原SQL Server数据库
  8. cayenne:用于随机模拟的Python包
  9. ab 模拟_Ab测试第二部分的直观模拟
  10. 在Spring Boot里面,怎么获取定义在application.properties文件里的值