查找元素:

Map可以根据健来查找元素,提供方法find(key),如果是这个健对应的元素存在,则返回的是这个健的迭代器iterator,否则返回的是std::end(); 使用find()函数有点笨拙,但是还是必须的有时候,如果是只想知道有木有这个健对应的元素,则可以使用count(key),因为是map所以键值是唯一的,count(key)返回的是这个健的元素个数

在map中返回1表示存在这个元素,0表示不存在这个元素。

删除元素:

map也提供erase(key);删除对应键值的元素;

插入实例:

  1. #include <iostream>
  2. #include <map>
  3. class BankInfo
  4. {
  5. public:
  6. BankInfo():mID(),mName(""){}
  7. BankInfo(int id,const std::string& name)
  8. :mID(id),mName(name)
  9. {
  10.  
  11. }
  12. void setID(int id){mID = id;}
  13. int getID(){return mID;}
  14. void setName(std::string name) {mName = name;}
  15. std::string getName() {return mName;}
  16.  
  17. private:
  18. int mID;
  19. std::string mName;
  20. };
  21.  
  22. class BankDB
  23. {
  24. public:
  25. bool addAcount(BankInfo dbInfro);
  26.  
  27. void delAcount(int key);
  28.  
  29. BankInfo& getKey(int key);
  30.  
  31. BankInfo& getName(const std::string& name);
  32. private:
  33. std::map<int,BankInfo> mClients;
  34. };
  35.  
  36. bool BankDB::addAcount(BankInfo dbInfro)
  37. {
  38. auto ret = mClients.insert(std::make_pair(dbInfro.getID(),dbInfro));
  39. if(ret.second)
  40. {
  41. return true;
  42. }
  43. return false;
  44. }
  45.  
  46. void BankDB::delAcount(int key)
  47. {
  48. mClients.erase(key);
  49. }
  50.  
  51. BankInfo& BankDB::getKey(int key)
  52. {
  53. auto ret = mClients.find(key);
  54. if(ret == std::end(mClients))
  55. {
  56. throw std::out_of_range("out of range");
  57. }
  58. return ret->second;
  59. }
  60.  
  61. BankInfo& BankDB::getName(const std::string& name)
  62. {
  63. auto ret = std::begin(mClients);
  64. for(;ret != std::end(mClients);++ret)
  65. {
  66. if(ret->second.getName() == name)
  67. {
  68. return ret->second;
  69. }
  70. }
  71. throw std::out_of_range("out of range");
  72. }
  73.  
  74. int main()
  75. { BankDB db;
  76. db.addAcount(BankInfo(,"abc"));
  77. db.addAcount(BankInfo(,"bcd"));
  78. db.addAcount(BankInfo(,"cde"));
  79.  
  80. try {
  81. auto ret = db.getKey();
  82. std::cout << "key[" << ret.getID() << "]" << " ";
  83. std::cout << "value :" << ret.getName() << std::endl;
  84.  
  85. auto ret1 = db.getName("cde");
  86. std::cout << "key[" << ret1.getID() << "]" << " ";
  87. std::cout << "value :" << ret1.getName() << std::endl;
  88.  
  89. auto ret2 = db.getName("dfe");
  90. std::cout << "key[" << ret2.getID() << "]" << " ";
  91. std::cout << "value :" << ret2.getName() << std::endl;
  92.  
  93. }catch (const std::out_of_range&)
  94. {
  95. std::cout << "Not find this value" << std::endl;
  96. }
  97.  
  98. return ;
  99. }

结果是:

key[1] value :abc
key[3] value :cde
Not find this value

map详讲<二>的更多相关文章

  1. vector详讲(二)迭代器

    先看一下代码: #include <iostream> #include <vector> int main() { std::vector<double> dou ...

  2. zTree应用实例详讲(3)

    zTree应用实例详讲(3) 上一讲中,已经讲到了重命名与删除.那么这一讲,我们来做新建文件夹. 其实新建是非常简单的,想一下我们想要的效果:点击新建,然后在一个节点下面出现一个新建的文件夹,并且与此 ...

  3. zTree应用实例详讲

    zTree应用实例详讲(1) 因为项目的需要,要创建一棵动态的文件树,此树除了实现异步获取子节点外,还要实现对树节点的增.删.改.查.移动.重命名.批量删除.批量移动. 每一个操作都要和数据库打交道. ...

  4. SQL优化 MySQL版 - 多表优化及细节详讲

    多表优化及细节详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:本文章需要MySQL数据库优化基础或观看前几篇文章,传送门: B树索引详讲(初识SQL优化,认识索引):htt ...

  5. PopUpWindow使用详解(二)——进阶及答疑

      相关文章:1.<PopUpWindow使用详解(一)——基本使用>2.<PopUpWindow使用详解(二)——进阶及答疑> 上篇为大家基本讲述了有关PopupWindow ...

  6. Android View 的绘制流程之 Layout 和 Draw 过程详解 (二)

    View 的绘制系列文章: Android View 的绘制流程之 Measure 过程详解 (一) Android View 绘制流程之 DecorView 与 ViewRootImpl 在上一篇  ...

  7. List、Set、Map详解及区别

    一.List接口 List是一个继承于Collection的接口,即List是集合中的一种.List是有序的队列,List中的每一个元素都有一个索引:第一个元素的索引值是0,往后的元素的索引值依次+1 ...

  8. .NET DLL 保护措施详解(二)关于性能的测试

    先说结果: 加了缓存的结果与C#原生代码差异不大了 我对三种方式进行了测试: 第一种,每次调用均动态编译 第二种,缓存编译好的对象 第三种,直接调用原生C#代码 .net dll保护系列 ------ ...

  9. iOS开发——语法篇OC篇&高级语法精讲二

    Objective高级语法精讲二 Objective-C是基于C语言加入了面向对象特性和消息转发机制的动态语言,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,进行消息发送和 ...

随机推荐

  1. mongo_connector.oplog_manager:670 - Exception during collection dump

    今天再整合mongodb和elasticsearch时,执行最后一步命令 “mongo-connector -m -m localhost:8090 -t  -t -t localhost:9200 ...

  2. 对JDK、JRE和JVM的一些浅薄理解

    JDK:JDK(Java Development Kit),顾名思义是java程序的开发包,任何java程序想要运行都需要相应版本的JDK,可以到oracle下载(下载之后自带JRE和编译工具等,无需 ...

  3. JMX 远程监控 Linux tomcat 功能实现

    作者远程服务器操作系统 CentOS 7.0, tomcat 版本 7.0 1. Linux tomcat 配置 1.1 catalina_opt 配置 可以在 catalina.sh 文件中添加如下 ...

  4. 解决:IDEA springmvc maven 项目搭建完后没有生成 webcontent 目录

    前言:发现项目创建好,配置好,写好测试代码,一看没有 webcontent 目录. 问题: 解决方案: ctrl + alt + Shift + S

  5. 将Windows上的Oracle迁移至Linux

    迁移前提: 1.在安装Linux数据库实例时,注意选择的编码格式要与Windows的数据库实例一致. 迁移步骤 1.检查Linux上数据库实例的编译格式 SQL> select userenv( ...

  6. Spring中的BeanFactory和ApplicationContext的区别

    我用一个例子去测试BeanFactory和ApplicationContext的区别 首先建立一个bean public class User { //声明无参构造,打印一句话,监测对象创建时机 pu ...

  7. Mac里用终端ssh远程连接Centos服务器

    在mac终端下输入 ssh -l root *.*.*.* 就可以远程连接Centos服务器了,端口没变还是:22 如果改变端口用下面方法输入: ssh -p 448(你改变的端口) -l root( ...

  8. 3d图片点击切换

    效果图: 代码块: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  9. <Android 应用 之路> 百度地图API使用(4)

    前言 百度地图的定位功能和基础地图功能是分开的,使用的是另外的jar包和so库文件,详情请关注官网: 百度定位SDK 配置 下载对应的jar包和so库,然后移动到lib目录下 AS中注意事项 sour ...

  10. 新手嘛,先学习下 Vue2.0 新手入门 — 从环境搭建到发布

    Vue2.0 新手入门 — 从环境搭建到发布 转自:http://www.runoob.com/w3cnote/vue2-start-coding.html 具体文章详细就不搬了,步骤可过去看,我这就 ...