關於std map中的find和 的問題

2021-06-18 05:04:27 字數 598 閱讀 5482

**:

std::map不是順序容器,這應該都知道的,map中過載了operator 操作符,可以用map的鍵值索引到相關的資料,但是這個和一般陣列的可不一樣。有的人又認為既然就是利用下標做索引和std::map中的find用鍵值索引是不是一樣的,所以有的會寫出下面類似的**:

std::mapmaptemp;

...int* find1(int i)

上面**有什麼問題,看看operator 的原始碼

再看看find的原始碼

const_iterator find(const key_type& _keyval) const

對比上面黑色加粗的部分應該知道了吧,就是find1中你重複找了兩遍,標準的寫法應該是

int* find2(int i)

其實find1還好,就是多查了一遍,至少還判了索引的有效值,如果寫成下面這樣

int* find3(int i)

那就悲劇了,再看看operator 的原始碼紅色加粗的部分,操作符再沒有找到該鍵值索引值的時候會插入乙個鍵值索引為i的東西,這東西要是不了解bug查起來肯定會比較頭痛的。

記錄警示之

關於std map的節點大小

專案中需要用到很大的map,於是想看一下map本身的儲存消耗是多少,於是寫了個最簡單的allocator來試。以下myalloc的預設構造 廣義的 複製構造 rebind是必需的,為了檢視分配空間的大小,allocate也是必需的。用greater 顯式的構造map是為了說明,c 盡可能將語句解釋為...

QMap和std map的遍歷

兩種遍歷方式都使用迭代器 1qmap使用iterator.key 和iterator.value 方法獲取第乙個或第二個元素的值。而std map使用iterator first iterator second 來獲取第乙個或第二個元素的值。qmapm ratiocfg qmap iterator ...

關於find 的總結

find type f more 查詢當前目錄下的檔案型別的檔案 find type d more 查詢當前目錄下的目錄的檔案 find type f exec chmod r 644 exec表示承接前面的,表示前面的輸出用來放這裡 一般和find一起用 for i in find name ft...