先講下個人基本需求:選用C++ STL map容器用於存儲關聯數據,個人Key爲std::string類型,Value爲自定義類指針;這裏假設爲Object*;指針
其實踩到的坑很簡單,就是用了map的下標操做和insert操做混合使用; 在插入操做以前用了map[name]做檢測,發現返回的值爲NULL,這時用insert(pair(name, value))去插入我想要的item;而後發現map中元素second始終爲NULL;code
//僞代碼 function insertValue(std::string name, Object* value){ auto value = dataMap[name]; // 標記:1 if(value == NULL){ std::pair<std::string, Object*> item(name, value); dataMap.insert(item); } ...//其餘操做 }
而後會發現剛剛插入的Key=name的元素的Value始終是NULL; 這裏踩到的坑就是 「標記:1」處用了下標操做;下表操做展開:由於Key=name的元素不存在,map中會插入Key=name的元素並自動將Value初始化爲NULL; 接下來再使用insert插入實際要的元素時,發現map中已經有Key=name的元素,插入操做不成功;從而致使bug;string
寫多了腳本,C++的語法忘得差很少了,萬惡的C++!^_^;it
一、查詢map中是否有相關的元素,推薦使用find操做; 二、使用下標操做,但要多加留心; 三、insert操做是有返回值的,最好作相應的檢測io