**:
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...