2015-07-02 161 views
3
std::map<Key,Value> mymap; 
(void)mymap[Key(...)]; // create value if not there 
typename std::map<Key,Value>::iterator it = mymap.find(key); 
it->second.pkey = &it->first; // store a pointer to the actual key 

這是安全嗎?換句話說,映射是否允許在插入/擦除操作期間複製密鑰,這會使Value::pkey無效?存儲指向地圖鍵的指針

任何C++ 98與C++ 11的區別?

+0

在'Value'中存儲密鑰並將指針_to_ key _as_用作自定義比較的密鑰可能會有好處。取決於你的使用情況。 –

回答

4

std::map迭代器僅在擦除時失效(eraseclear)。在地圖中插入新元素不會影響現有的迭代器。這在C++ 98和C++ 11中是一樣的。

如果迭代器保持有效,則它指向的密鑰也保持有效。