###《Effective STL》--Chapter3

点击查看Evernote原文。

#@author:       gr
#@date:         2014-09-13
#@email:        forgerui@gmail.com

Chapter3 关联容器

Topic 22: 切勿直接修改setmultiset中的键

修改元素的值可以通过下面五步操作,避免作类型转换。

struct IDNumberLess : public binary_function<Employee, Employee, bool> {bool operator() (const Employee& lhs, const Employee& rhs){return lhs.idNumber() < rhs.idNumber();}
}
/* 1. 查找要修改的元素 */
set<Employee, IDNumberLess> se;
//...
Employee selectedID;
iterator it = se.find(selectedID);
if (it != se.end()){/* 2. 拷贝元素 */Employee tmp(*it);/* 3. 修改元素值 */tmp.setTitle("hello");/* 4. 删除原来元素 */se.erase(it++);/* 5. 插入新元素 */se.insert(it, tmp);
}

Topic 23: 考虑用排序的vector替代关联容器

Topic 24: 当效率至关重要时,请在map::operator[]map::insert之间谨慎做出选择。

  这一条款说起来很简单,就是使用map时,如果是更新操作使用map::operator[];如果是插入新值时使用map::insert

map<int, Widget> m;
//更新操作,m中含有key为1,使用operator[]
m[1] = 1.5;
//插入操作,不含有key为2的项,不用operator[],使用insert
m.insert(map<int, Widget>::value_type(2, 1.50));

  这个问题的起源在于map::operator[]既可以更新旧值又可以插入新值,但使用map::operator[]进行插入新值效率很低,他会先调用默认构造函数创建一个默认对象,返回引用,修改其值。
  
  最后也可以自己实现一个函数判断是更新还是插入,分别调用map::operator[]map::insert

  

Topic 25: 熟悉非标准的散列容器

  除了标准的STL容器,还可以使用其它渠道的容器,包括hash_sethash_multisethash_maphash_multimap。不同的提供方实现的形式也各自不同。
  
  SGI的实现把元素放在一个单向的链表中,Dinkumware的实现则使用了双向链表,但内存消耗更大。根据自己的实际情况选择。

转载于:https://www.cnblogs.com/gr-nick/p/3996107.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何获取网络资源?

# encodingutf-8 #python 2.7.10 #xiaodeng #如何获取网络资源&#xff1f; #HTTP权威指南 26页#url就是因特网资源的标准化名称&#xff0c;他指向每一条电子信息&#xff0c;告诉你他们位于何处&#xff0c;以及如何与之交互。 #URL是浏览器寻找信息时所需的资源位置。 #一个…

Loadrunner多服务器连接问题

今天用想增加一个压力机,在服务器管理列表里怎么也连不上,后来解决方法如下:1. 关闭所有loadrunner组件,并手动结束lr_开头的进程2.找到惠普loadrunner安装目录(C:\Program Files\HP\LoadRunner\bin),手动运行magentproc.exe即可最新内容请见作者的GitHub页&#xff1a;http://…

java 常量存储_JAVA 存储空间 寄存器 堆栈 堆 常量存储 非RAM存储

&#xff11;.寄存器这是最快的存储区&#xff0c;因为它位于处理器内部&#xff0c;数量极其有限&#xff0c;所以寄存器根据需求进行分配&#xff0c;你不能直接控制&#xff0c;也不能在程序中感 觉到寄存器存在的任何迹象。2.堆栈位于通用RAM(随机访问存储器)中&#xff0…

物联网安防技术融合在细分领域的应用分析

物联网的核心是业务和应用的创新。物联网技术与智能化技术的深度融合&#xff0c;加快了行业的智能化发展&#xff0c;促使了行业需求在应用层上的落地。安防技术架构是物联网架构的一个子集&#xff0c;传统安防是一个相对保守的行业。现代安防和物联网在业务和技术上的融合发…

一个强大的工具来模拟数百万​​并发用户负载测试:Gryphon

Gryphon是由网易自主研发的能够模拟千万级别并发用户的一个软件&#xff0c;目的是能够用较少的资源来模拟出大量并发用户&#xff0c;并且能够更加真实地进行压力测试&#xff0c; 以解决网络消息推送服务方面的压力测试的问题和传统压力测试的问题。Gryphon分为两个程序&…

java 反射与泛型_Java基础系列 - 泛型和反射机制

package com.test5;import java.lang.reflect.Field;import java.lang.reflect.Method;/*** Java泛型和反射机制(泛型的好处 代码安全简单&#xff0c;自动装箱拆箱&#xff0c;提高代码的重用率)*/public class test5 {public static void main(String[] args) {Employer empl…

Linux环境下的Popush部署——张凯

完成情况&#xff1a; 已按照相关部署文档完成了所有任务&#xff0c;包括软件包的安装与配置&#xff0c;以及对各种开发语言的支持&#xff0c;以及gdb的调试功能的支持 遇到的主要问题&#xff1a; 由于从大二以来我基本上所有的开发工作都是在Linux下做的&#xff0c;因此对…

【c++】标准模板库STL入门简介与常见用法

一、STL简介 1、什么是STL STL&#xff08;Standard Template Library&#xff09;标准模板库&#xff0c;主要由容器、迭代器、算法、函数对象、内存分配器和适配器六大部分组成。STL已是标准C的一部分&#xff0c;使用STL开发系统可以提高开发效率。 2、容器&#xff08;Cont…

强连通分量(学习心得)

定义&#xff1a;有向图强连通分量&#xff1a;在有向图G中&#xff0c;如果两个顶点vi,vj间&#xff08;vi>vj&#xff09;有一条从vi到vj的有向路径&#xff0c;同时还有一条从vj到vi的有向路径&#xff0c;则称两个顶点强连通如果有向图G的每两个顶点都强连通&#xff0c…

java for的增强_Java基础之增强for循环

平时大家for循环应该用的不少&#xff0c;特别是增强for循环&#xff0c;简单快捷。但是在增强for中做删除操作&#xff0c;却会抛出java.util.ConcurrentModificationException&#xff0c;一起来看下。上面的代码&#xff0c;在for循环执行完if中的remove&#xff0c;遍历下一…

window.history 和 DWZ 框架

DWZ框架的ajax请求返回的一般都是一个HTML片段&#xff0c;整个页面是由一个个HTML片段组成的&#xff0c;可以由TAB切换其内容&#xff0c;但是只有一个body和HEAD&#xff0c;一般head 和 菜单栏是不会动的。 今天遇到一个问题&#xff0c;当一个点击进入一个tab页面时&#…

大道至简(第六章)读后感

大道至简&#xff08;第六章&#xff09;读后感 还是不乐意去读&#xff0c;但总算可以耐心的读下去了&#xff0c;这也许也算是读大道至简以来的收获之一吧。第六章的题目是从编程到工程&#xff0c;看到工程二字&#xff0c;让我不由想起了前几天和高中同学聊天。他报的燕大土…

遏止个人信息泄露亟待立法跟进

据报道&#xff0c;近日全国30个省份275位艾滋病感染者称接到了诈骗电话&#xff0c;艾滋病感染者的个人信息疑似被大面积泄露。无独有偶&#xff0c;近日票务网站大麦网因账号信息被窃取&#xff0c;间接导致全国多地用户受骗。目前至少有17名受害者&#xff0c;被骗至少54万元…

确认类是否可以在运行期使用

问题: 你正在使用最新版的 SDK 中的一些类,但是你不确定这些类是否能在你程序运行的设 备中可用,因为有可能你部署的目标设备要比最新版 SDK 早。 方案: 用NSClassFromString函数. 传入类的名称字符串符。若是返回值为空(nil),则表示这个类无法在这台设备上使用;反之,这个类则…

最新hosts,更新hosts,可用

点击这里&#xff0c;全选后复制&#xff0c;粘贴到C:\Windows\System32\drivers\etc的hosts里面&#xff0c;把原来的置换了转载于:https://www.cnblogs.com/zzw1994/p/4940924.html

酒店业解决方案

思科业务就绪酒店解决方案&#xff0c;为酒店的经营和管理提供一个高效率、高盈利、且可不断发展和改进的平台&#xff0c;帮您重建酒店竞争优势&#xff0c;为酒店带来意想不到的转变&#xff01; 思科酒店行业解决方案更加融合的思科网络在改善酒店的运营和员工生产率&#x…

配置SQL Server 2012 AlwaysOn ——step1 建立AD域及DNS配置

需要三台安装好windows server 2008 R2 sp1的虚拟机服务器SQLTESTDNS&#xff0c;SQLTESTMAIN,SQLTESTSUB&#xff0c;以SQLTESTMAIN为主数据库及群集服务器&#xff0c;SQLTESTDNS为DNS及域服务器 1.在SQLTESTDNS的服务器管理器内设置静态IP地址192.168.10.1,DNS为127.0.0.1&a…

lintcode:递归打印数字

题目 用递归打印数字 用递归的方法找到从1到最大的N位整数。 样例 给出 N 1, 返回[1,2,3,4,5,6,7,8,9]. 给出 N 2, 返回[1,2,3,4,5,6,7,8,9,10,11,...,99]. 注意 用下面这种方式去递归其实很容易&#xff1a; recursion(i) {if i > largest number:returnresults.add(i)r…

做免费的EDM,EmailCar看中的是挖掘数据的价值

从2008年开始&#xff0c;做了9年企业级EDM&#xff08;电子邮件营销&#xff09;服务的陆霏近日宣布&#xff0c;他们的产品EmailCar从4.0版本开始永久免费为企业提供电子邮件基础投递业务。 我们电子邮箱经常收到的推广邮件就属于EDM&#xff0c;即Email Direct Marketing。这…

java 读取split_Java报错系列——split

在String中,split方法如下&#xff1a;可见&#xff0c;split的核心在于Pattern.compile(regex).split(this, limit);Java提供Pattern,Matcher用于支持正则&#xff0c;可以看一个例子&#xff1a;运行结果是&#xff1a;0,1||3,4|ab|7,8|cef|8,9||11,12|kk|13,14|a|需要注意的…