C++ STL map補坑

先講下個人基本需求:選用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

相關文章
相關標籤/搜索