我有一个无序 map std::unordered_map<unsigned int, MyObject*> myDictionary
.
当我要添加条目时,我首先要检查 key 是否已经存在。如果是这样,我需要访问我的对象来调用函数。
如果键不存在,我想用这个键创建一个新的 MyObject。
做这个更好吗?
MyObject *my_obj;
try
{
my_obj = myDictionary.at(key);
}
catch (int e)
{
my_obj = new MyObject();
myDictionary[key] = my_obj;
}
my_obj->Function();
还是这个?
MyObject *my_obj;
if(myDictionary.find(key) == myDictionary->end())
{
my_obj = new MyObject();
myDictionary[key] = my_obj;
}
else
{
my_obj = myDictionary[key];
}
my_obj->Function();
还是别的什么?
最佳答案
最好的方法是让 map 包含 MyObject
而不是 MyObject *
std::unordered_map<unsigned int, MyObject> myDictionary;
并将其用作
myDictionary[key].Function(); // if key doesn't exist, it'll be inserted for you
假设您必须使用 MyObject *
,请使用 unique_ptr
来保存它们,而不是使用原始指针。
std::unordered_map<unsigned int, std::unique_ptr<MyObject>> myDictionary;
unsigned key = 42;
if(myDictionary.find(key) == myDictionary.end()) {
myDictionary.insert(std::make_pair(key, std::unique_ptr<MyObject>(new MyObject())));
}
myDictionary[key]->Function();
关于C++ 在 unordered_map 中添加新对象的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24328709/