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系统来动态创建类和对象,进行消息发送和 ...
随机推荐
- 纯代码Autolayout的三种方法
Autolayout讲解较多的就是xib和storyboard用法,本文主要记录纯代码的Autolayout使用方法: 方法1.苹果原生的方法,这种方法虽然简单但是太过繁杂,可用性很差 //宽度=su ...
- ArrayList封装
package com.cn.test.jihe; import java.util.Arrays; /** * * insert * delete * update * get * */ publi ...
- 阿里巴巴的数据池DRUID
使用了阿里巴巴的数据池管理: 监控DB池连接和SQL的执行情况 https://github.com/alibaba/druid/wiki/常见问题 https://www.cnblogs.com ...
- Github+hexo+next搭建教程
今天参考的是大神的教程,学了一个新东西,但是可能由于原教程中运用的npm包与我当前使用的npm包版本不同的原因,有出过多处运行错误,但都在此教程中解决了; 总结了下命令: npm install he ...
- RequireJS 是一个JavaScript模块加载器
RequireJS 是一个JavaScript模块加载器.它非常适合在浏览器中使用, 它非常适合在浏览器中使用,但它也可以用在其他脚本环境, 就像 Rhino and Node. 使用RequireJ ...
- 02:奇数单增序列 个人博客doubleq.win
个人博客doubleq.win 02:奇数单增序列 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个长度为N(不大于500)的正整数序列,请将其中的所 ...
- 辅助判卷程序的一些小bug
首先谈一下,double类型 之前查过一些资料,double类型做==(相等)判断时候,会出现一些错误,及61.95与61.95不相等 对main函数中的部分加以改正,下面的answer为string ...
- 浅谈搜索引擎SEO(HTML/CSS)
SEO:搜索引擎优化(免费): SEM:搜索引擎营销(付费). 它们两者的区别是: 1.SEM高投入,SEO低投入: 2.SEM短.效益块,SEO长期投入.增长慢: 3.新广告法颁布之后SEM广告位减 ...
- JS计算距当前时间的时间差
/** * JS获取距当前时间差 * * @param int time JS毫秒时间戳 * */ function get_time_diff(time) { var diff = ''; var ...
- centos下运行python3.6+Django+mysql项目
文件准备: Django项目 myslq安装 关闭防火墙 用xshell拖拽到centos上 安装文件: 安装python3.6(3.7有问题) sh install_py36.sh 关闭防火墙 sh ...