###《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.pswp.cn/news/258143.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258143.shtml
英文地址,請注明出處:http://en.pswp.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|需要注意的…