查找元素:

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

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

删除元素:

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

插入实例:

#include <iostream>
#include <map>
class BankInfo
{
public:
BankInfo():mID(),mName(""){}
BankInfo(int id,const std::string& name)
:mID(id),mName(name)
{ }
void setID(int id){mID = id;}
int getID(){return mID;}
void setName(std::string name) {mName = name;}
std::string getName() {return mName;} private:
int mID;
std::string mName;
}; class BankDB
{
public:
bool addAcount(BankInfo dbInfro); void delAcount(int key); BankInfo& getKey(int key); BankInfo& getName(const std::string& name);
private:
std::map<int,BankInfo> mClients;
}; bool BankDB::addAcount(BankInfo dbInfro)
{
auto ret = mClients.insert(std::make_pair(dbInfro.getID(),dbInfro));
if(ret.second)
{
return true;
}
return false;
} void BankDB::delAcount(int key)
{
mClients.erase(key);
} BankInfo& BankDB::getKey(int key)
{
auto ret = mClients.find(key);
if(ret == std::end(mClients))
{
throw std::out_of_range("out of range");
}
return ret->second;
} BankInfo& BankDB::getName(const std::string& name)
{
auto ret = std::begin(mClients);
for(;ret != std::end(mClients);++ret)
{
if(ret->second.getName() == name)
{
return ret->second;
}
}
throw std::out_of_range("out of range");
} int main()
{ BankDB db;
db.addAcount(BankInfo(,"abc"));
db.addAcount(BankInfo(,"bcd"));
db.addAcount(BankInfo(,"cde")); try {
auto ret = db.getKey();
std::cout << "key[" << ret.getID() << "]" << " ";
std::cout << "value :" << ret.getName() << std::endl; auto ret1 = db.getName("cde");
std::cout << "key[" << ret1.getID() << "]" << " ";
std::cout << "value :" << ret1.getName() << std::endl; auto ret2 = db.getName("dfe");
std::cout << "key[" << ret2.getID() << "]" << " ";
std::cout << "value :" << ret2.getName() << std::endl; }catch (const std::out_of_range&)
{
std::cout << "Not find this value" << std::endl;
} return ;
}

结果是:

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. 实习小结(二)--- SSM框架搭建

    SSM项目框架搭建 前几天做了一个学生信息管理的项目,使用纯控制台输入,查询数据库,将信息在控制台中打印,功能完善得差不多之后,老师让将这个项目移植到Web中,使用Spring+SpringMVC+M ...

  2. ES6学习笔记(四)-数值扩展

    PS: 前段时间转入有道云笔记,体验非常友好,所以笔记一般记录于云笔记中,每隔一段时间,会整理一下, 发在博客上与大家一起分享,交流和学习. 以下:

  3. ES6学习笔记(二)-字符串的扩展

    一.字符的 Unicode 表示法 JavaScript 允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点. 表示法只限于码点在\u0000~\uFFFF之间的字符, ...

  4. parseInt()详解

    主要解释下面的计算方法: parseInt("10"); //返回 10 parseInt("19",10); //返回 19 (10+9) parseInt( ...

  5. MathQuill.js

    MathQuill.js通过html.css.javascript实现数学公式 <p>Type math here: <span id="math-field"& ...

  6. Cloudera Manager5安装总结遇到问题及解决办法 CDH 5.8 on CentOS 7

    问题导读:1.Cloudera Manager在线安装你认为有什么优点和缺点?2.Cloudera Manager安装过程中遇到,你认为该如何解决?3.在线安装addr.arpa domain nam ...

  7. Android N(API level 24.)废弃了Html.fromHtml(String)

    从API level 24开始,fromHtml(String)被废弃,使用fromHtml(String source, int flags) 代替 flags: FROM_HTML_MODE_CO ...

  8. elasticsearch 使用tcp 访问NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{Yk0WjtKbQXqYCJSDFRYlRA}

    默认的 elasticsearch.yml 端口是9200,是给tcp提供的.如果想使用 自带的  TransportClient 需要配置为 tcp 的9300端口.配置方式为: 在/config/ ...

  9. 使用ajax请求后返回数据显示undefinded解决办法

    今天在使用七牛的sdk做断点续传时候,当文件过大,本地没有存储时候,想要通过ajax将本地信息存到服务器缓存,之后通过读取缓存的方式来完成文件过大断点续传无法使用问题. 但是在使用ajax请求的时候, ...

  10. CPU纯软件全虚拟化技术

    我们在前面的文章中提到了虚拟化技术的大致分类情况,即分为全虚拟化.半虚拟化和硬件辅助虚拟化3大类.而我们虚拟化技术最主要的虚拟主体就是我们的硬件CPU.内存和IO,那么我们的CPU在全虚拟化模式下如何 ...