map详讲<二>
查找元素:
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详讲<二>的更多相关文章
- vector详讲(二)迭代器
先看一下代码: #include <iostream> #include <vector> int main() { std::vector<double> dou ...
- zTree应用实例详讲(3)
zTree应用实例详讲(3) 上一讲中,已经讲到了重命名与删除.那么这一讲,我们来做新建文件夹. 其实新建是非常简单的,想一下我们想要的效果:点击新建,然后在一个节点下面出现一个新建的文件夹,并且与此 ...
- zTree应用实例详讲
zTree应用实例详讲(1) 因为项目的需要,要创建一棵动态的文件树,此树除了实现异步获取子节点外,还要实现对树节点的增.删.改.查.移动.重命名.批量删除.批量移动. 每一个操作都要和数据库打交道. ...
- SQL优化 MySQL版 - 多表优化及细节详讲
多表优化及细节详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:本文章需要MySQL数据库优化基础或观看前几篇文章,传送门: B树索引详讲(初识SQL优化,认识索引):htt ...
- PopUpWindow使用详解(二)——进阶及答疑
相关文章:1.<PopUpWindow使用详解(一)——基本使用>2.<PopUpWindow使用详解(二)——进阶及答疑> 上篇为大家基本讲述了有关PopupWindow ...
- Android View 的绘制流程之 Layout 和 Draw 过程详解 (二)
View 的绘制系列文章: Android View 的绘制流程之 Measure 过程详解 (一) Android View 绘制流程之 DecorView 与 ViewRootImpl 在上一篇 ...
- List、Set、Map详解及区别
一.List接口 List是一个继承于Collection的接口,即List是集合中的一种.List是有序的队列,List中的每一个元素都有一个索引:第一个元素的索引值是0,往后的元素的索引值依次+1 ...
- .NET DLL 保护措施详解(二)关于性能的测试
先说结果: 加了缓存的结果与C#原生代码差异不大了 我对三种方式进行了测试: 第一种,每次调用均动态编译 第二种,缓存编译好的对象 第三种,直接调用原生C#代码 .net dll保护系列 ------ ...
- iOS开发——语法篇OC篇&高级语法精讲二
Objective高级语法精讲二 Objective-C是基于C语言加入了面向对象特性和消息转发机制的动态语言,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,进行消息发送和 ...
随机推荐
- OpenGL开发入门
1.OpenGL简介: OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三维图形 API 的子集,针对手机.PDA和游戏主机等嵌入式设备而设计.该API ...
- Grpc helloworld demo的经验
GreeterGrpc.java这个文件是插件protoc-gen-grpc-java生成的 刚开始直接用类似如下的指令无法生成GreeterGrpc.java文件 protoc --java_ou ...
- 最短路问题(dijkstral 算法)(优化待续)
迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以起始点为中心向 ...
- oauth2.0授权协议
参考文章 一.OAuth是什么? OAuth的英文全称是Open Authorization,它是一种开放授权协议.OAuth目前共有2个版本,2007年12月的1.0版(之后有一个修正版1.0a)和 ...
- Oracle数据库采用数据泵方式导入导出数据
特别说明:Oralce的数据泵导入导出技术只能用在数据库服务器上,在只有客户端的机器上是无法使用数据泵技术的. 1.创建备份文件目录 mkdir d:\dmp 2.在Oralce中注册该目录,将目录 ...
- Node.js IO处理输入和回显,以及当今web应用程序的发展史
1.关于Node.js IO处理输入和回显 在Windows终端或者CD中输入 echo 'I must learn about Node.js' 结果将刚刚输入的 echo 'I mus ...
- rocketmq 控制台 trackType NOT_CONSUME_YET
1. 问题描述 rocketmq消费者偶有没有收到消息,查看后台, 显示NOT_CONSUME_YET 2. 分析 mq控制台 显示有该条消息数据 只是状态为未消费 那么问题应该出在 消费者一方 诶? ...
- <!DOCTYPE> 标签是什么
DOCTYPE 标签,是html文档的类型声明(document type declaration,所谓声明,也就是宣称我他妈是谁),用来告诉浏览器,使用什么样的文档类型定义(Document Typ ...
- WiFiDog 与 AuthServer
背景 在一些公共场所(比如公交车.地跌.机场等)连接当地的 WiFi 时会弹出一个验证表单,输入验证信息(比如短信验证码)后就能够通过该 WiFi 联网. 本文将介绍通过 OpenWrt WiFiDo ...
- Linux开篇
1.为什么学习Linux? 2.学习Linux的资料