我有如下所示C++:性病::地圖拋出out_of_range異常
template <typename KeyType, typename ValueType>
KeyType IDSystem<KeyType,ValueType>::registerParameter(const ValueType& value)
{
KeyType key = __IDCounter++;
_Map[key] = value; //crashes here
return key;
}
其中_MAP是
std::map<KeyType, ValueType> _Map;
用於崩潰,其中所指示的程序的代碼,然後我取代該行與
_Map.at(key) = value; //out_of_range thrown here
現在程序拋出一個std :: out_of_range異常在同一行...
KeyType是來自標準庫的int64_t,而ValueType是指向某個類的指針(如MyClass *)。
令人驚訝的是,我使用的std ::地圖就像沒有發生問題之前......和。
我使用std :: map不正確嗎?請指教。
如果密鑰在地圖中不存在,則預計會出現out_of_range:http://www.cplusplus.com/reference/map/map/at/ – JaredC 2013-03-02 18:57:31
就目前而言,您的代碼具有未定義的行爲,因爲兩者都存在'__IDCounter'和'_Map'被保留用於實現。 – 2013-03-02 19:01:59
@JaredC感謝您的回答。我應該如何添加一個新的密鑰?我在一本名爲Professional C++的書中讀到,運算符[]應該在不存在時分配鍵。 – 2013-03-02 19:02:28