1. 程式人生 > >map 刪除和替換元素時需要注意的細節

map 刪除和替換元素時需要注意的細節

map:對映

//注
std::map <key,value> c;
c[key];

返回一個引用,指向鍵值為key的元素,但如果元素不存在,就安插該元素
對於這一點,應該注意,不過有應該注意的地方,就是可能出錯的地方,這就代表需要改進。但是這樣設計,有利有弊。
1:可以直接使用下標索引來直接插入元素
2:如果不小心輸錯鍵值,且鍵值不存在在map裡面,就會直接插入一個新的元素,而不會報錯

//錯誤的想法
        typedef std::map<std::string,float> StringFloatMap;
        StringFloatMap coll;
        StringFloatMap::iterator pos;
        //……
        for(pos=coll.begin(); pos!=coll.end(); pos++)
        {     
        		if(pos->second==value)    
        		{        
       		 coll.erase(pos);//error!!!    
        		}
        }
        //對pos 實施erase(),之後會使得pos不再是一個有效的iterator
// 正確做法應該是:
  typedef std::map<std::string,float> StringFloatMap;
  StringFloatMap coll;
  StringFloatMap::iterator pos;
 // ……
 for(pos=coll.begin(); pos!=coll.end();  )
 {     
     	if(pos->second==value)    
     	{        
     		coll.erase(pos++);//!!!
        }    
         else        
         ++pos;
}

不可以使用直接修改key值

//例如這樣的程式碼
map<key,value> ::iterator pos;
pos->second//可以獲得元素的實值
//嘗試使用
//pos->first=key_;
//會出現錯誤

如果非要修改key的值,唯一的方法,就是使用value相同舊元素替換為元素

template <class cont>
bool replace_key( cont& c,
			const typename cont::key_type& old_key,
			const typename cont::key_type& new_key )
	{
		typename cont::iterator pos;//需要加上type來體現cont是模板
		pos=c.find(old_key);
		//有key_type value_type 兩個容器提供的型別,可以用來代表鍵與實值
		if (pos!=c.end() )
		{
			c.insert( typename cont::value(new_key,pos->second));
			c.remove(pos);
			return true;
		}
		else
		{
			return false;
		}
	}

相關推薦

map 刪除替換元素需要注意細節

map:對映 //注 std::map <key,value> c; c[key]; 返回一個引用,指向鍵值為key的元素,但如果元素不存在,就安插該元素 對於這一點,應該注意,不過有應該注意的地方,就是可能出錯的地方,這就代表需要改進。但是這樣設

struts2spring整合需要注意的地方

1、首先要記得匯入依賴包:除了一些基本的包之外,還要記得匯入這兩個包——commons-logging和struts2-spring-plugin commons-loggin.jar是Spring的

python學習 ( 一 ) :安裝基礎安裝環境需要注意的地方

常用:使用workon 時要在envs下使用 1. pip使用報錯 ‘pip’ 不是內部或外部命令,也不是可執行的程式或批處理檔案。 解決方法: 將python的環境新增到pathon中例如:Python27\Scripts 2.使用豆瓣原來安裝dj

使用python需要注意的點

最近使用Python的過程中遇到了一些坑,例如用datetime.datetime.now()這個可變物件作為函式的預設引數,模組迴圈依賴等等。 在此記錄一下,方便以後查詢和補充。 避免可變物件作為預設引數 在使用函式的過程中,經常會涉及預設引數。在Python中,當使用可變物件作為預設

結構體作為STL map的key需要注意什麼? (某公司招聘面試試題)

        某公司招聘的面試環節, 有這樣一個題目:結構體作為STL map的key時需要注意什麼?   對於懂STL map的同學來說, 這個題目還是比較easy的, 先看程式: #include <iostream> #include <stri

MyBatis排序使用order by 動態引數需要注意,用$而不是#, #{}${}的區別以及order by注入問題

ORDER BY ${columnName}這裡MyBatis不會修改或轉義字串。重要:接受從使用者輸出的內容並提供給語句中不變的字串,這樣做是不安全的。這會導致潛在的SQL注入攻擊,因此你不應該允許使用者輸入這些欄位,或者通常自行轉義並檢查。 #{}相當於jdbc中的

jQuery 刪除、複製替換元素

一、使用jQuery刪除元素 (1)、remove()移除所有匹配的元素   remove() 方法移除被選元素,包括所有文字和子節點。該方法不會把匹配的元素從 jQuery 物件中刪除,因而可以在將

NSURLProtocol處理重定向需要注意301302狀態

-(NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)respo

【Java】集合(List、Set、Map)遍歷、刪除、比較元素的小陷阱

主要說明List,其餘兩個都一樣 一、漏網之魚-for迴圈遞增下標方式遍歷集合,並刪除元素 如果你用for迴圈遞增下標方式遍歷集合,在遍歷過程中刪除元素,你可能會遺漏了某些元素。說那麼說可能也說不清楚,看以下示例: import ja

使用mvc返回給瀏覽器html元素需要註意的一個問題

字符 html元素 使用 cot 就會 div 區別 div標簽 標簽 當直接使用 return Cotent(string str)返回給頁面html元素時,特別需要註意html標簽的格式 比如:返回"<div></div>" 在頁面上是能成功地被

Lambda表示式For迴圈使用需要注意的一個地方

一個需要注意的地方看下面的程式碼: using System;using System.Collections.Generic;using System.Linq;namespace MyCsStudy{    clas

詳解關於Vue2.0路由開啟keep-alive需要注意的地方

Vue2.0 做應用必有的需求就是頁面資料需要做快取,不用每次進入頁面都要把資料重新請求一遍,每次頁面切換都有段等待資料相應時間,這個使用者體驗可想有多麼蛋疼,所以頁面快取是必要的,啥時候需要更新頁面資料呢?可以監聽狀態變化,或者是手動下拉重新整理重新請求資料,醬紫,我想使用者體驗會做的更好。 keep-a

八大基本變數在賦值需要注意的一個原則

java中的變數型別: 1.數值型變數: byte    short    int    long(長度排序) 2.字元型別: char(單個字元)   String(字串) 3.浮點型別: float(單精

QGraphicsItem使用訊號槽需要注意的事項

1. 繼承QGraphicsItem的子類需要首先繼承自QObjectd再繼承QGraphicsItem 2. 在子類標頭檔案方需要新增宣告 Q_OBJECT 3. 需要重新編譯 class MyItem : public QObject, public QGraphicsI

Vue2.0 路由開啟 keep-alive 需要注意的地方

Vue2.0 做應用必有的需求就是頁面資料需要做快取,不用每次進入頁面都要把資料重新請求一遍,每次頁面切換都有段等待資料相應時間,這個使用者體驗可想有多麼蛋疼,所以頁面快取是必要的,啥時候需要更新頁面資料呢?可以監聽狀態變化,或者是手動下拉重新整理重新請求資料,醬紫,我想使用者體驗會做的更

網站內部更新文章需要注意以下要點

1文章的原創性大家都知道,搜尋引擎非常喜歡原創文章。最好花點時間寫些原創文章。一篇原創文章值得十次重印和偽原創,你也可以鍛鍊自己的寫作能力。如果其實不費心做原創最好的假原創或掃書,只是盲目地重印就不能達到一個很好的目的,可能會適得其反。 2.使用關鍵詞更新文章必須是文章文字策劃的重點,並填寫

spring cloud 雙資料來源配置,兩種方式jdbcmybatis(jdbcTemplate sqlsessionTemplate)及需要注意的問題

一、jdbcTemplate:jdbc application.yml檔案:     spring:       application:       

原生js實現新增刪除查詢元素的class

<p id='p' class='dec'>hello</p> .active{ color:red; } .bigger{ font-size:30px; } .dec{ text-decoration:underline; } let

小程式成長之路_給頁面新增tabBar 新增tabBar注意事項 (三)

上篇部落格我們已經成功建立頁面,並且顯示我們自己所建立頁面的內容,那麼我們都知道每個專案下面都會有tab bar,當然大部分都有,也不排除沒有的情況啊,那麼這篇我主要是來新增一個tabBar並且 總結一下寫的過程中一個小程式 小白開發者遇到讓人頭疼的問題,並講解解決方法,也許

檔案讀取檔案寫入中需要注意的一些小知識

1,   is_file()函式:用來判斷 是否是為檔案或者是否存在該檔案 is_dir()函式:用來判斷 是否為目錄(資料夾)或者是夠存在該目錄 file_exists(檔案路徑):作用是判斷對應的路徑下 是否存在對應的檔案 它們的區別是如果已經存在該檔案或者資料夾,