map emplace 举例
时间: 2023-11-18 11:39:48 浏览: 57
好的,map emplace 是 C++ 11 新增的函数,可以用来在 map 中插入一个键值对。举个例子:假设我有一个 map<int, string>,我想插入一个键值对 (1, "hello"),我可以这样写:myMap.emplace(1, "hello")。这样就会在 myMap 中插入一个键值对 (1, "hello")。
相关问题
std::unordered_map<std::string, std::shared_ptr<AbstractEdgeFindCategories>> algorithmCategories;使用emplace函数插入键对值举例
`std::unordered_map` 是 C++ 中的一个关联容器,它内部使用哈希表实现,提供常数时间复杂度的查找、插入和删除操作。在这个例子中,`algorithmCategories` 是一个映射类型,键是 `std::string` 类型的字符串,值是 `std::shared_ptr<AbstractEdgeFindCategories>` 类型的对象指针,用于存储某个算法对应于边查找分类的信息。
`emplace` 函数是一个安全的插入操作,它可以同时构造新的键值对,如果键已经存在,则不会执行插入操作,而是直接返回已有的映射元素。下面是一个使用 `emplace` 插入的例子:
```cpp
// 假设我们有一个 AbstractEdgeFindCategories 的子类叫 SpecificCategory
SpecificEdgeFindCategories* specificCategory = new SpecificEdgeFindCategories();
// 使用 emplace 函数尝试插入键值对,如果 key 不存在则构造并插入,存在则不做额外操作
if (algorithmCategories.emplace("edgeFindingAlgorithm", std::make_shared<SpecificEdgeFindCategories>()).second) {
std::cout << "Inserted successfully!" << std::endl;
} else {
std::cout << "Key already exists." << std::endl;
}
// 如果你想更新已存在的键对应的值,可以这样做(假设 key 已经存在)
specificCategory->updateSomeProperty();
algorithmCategories["edgeFindingAlgorithm"] = specificCategory;
```
这里我们首先创建了一个 `SpecificEdgeFindCategories` 对象,然后使用 `emplace` 函数尝试插入键值对。如果键不存在(`emplace` 返回的 `.second` 是 `true`),我们就知道新键值对被成功添加。如果键已经存在(`.second` 是 `false`),表示我们不需要做额外操作,因为已经有一个实例关联到这个键了。
阅读全文