std::unordered_map<int, std::vector<Object*>>
是一个哈希表,其中键(key)是整数类型,值(value)是指向 Object
类型对象的指针向量。要将元素插入到这样的容器中,你需要做两件事:
Object
实例。以下是一个简单的示例代码,展示了如何插入元素:
#include <iostream>
#include <unordered_map>
#include <vector>
// 假设这是你的Object类
class Object {
public:
Object(int id) : id_(id) {}
int getId() const { return id_; }
private:
int id_;
};
int main() {
// 创建一个unordered_map,键是int类型,值是指向Object的指针的vector
std::unordered_map<int, std::vector<Object*>> map;
// 创建一些Object实例
Object* obj1 = new Object(1);
Object* obj2 = new Object(2);
Object* obj3 = new Object(3);
// 将Object指针插入到对应键的vector中
map[1].push_back(obj1);
map[2].push_back(obj2);
map[1].push_back(obj3); // 可以向同一个键添加多个对象
// 遍历unordered_map并打印每个键对应的Object的id
for (const auto& pair : map) {
std::cout << "Key: " << pair.first << std::endl;
for (const auto& objPtr : pair.second) {
std::cout << " Object ID: " << objPtr->getId() << std::endl;
}
}
// 清理分配的内存
for (auto& pair : map) {
for (auto objPtr : pair.second) {
delete objPtr;
}
}
return 0;
}
在这个例子中,我们首先创建了一个 unordered_map
,然后创建了几个 Object
实例,并将它们的指针插入到map中。最后,我们遍历map并打印出每个键对应的对象ID。
优势:
std::unordered_map
提供了平均常数时间复杂度的查找、插入和删除操作。std::vector
作为值类型可以存储多个对象,并且可以动态增长。类型:
int
。std::vector<Object*>
。应用场景:
可能遇到的问题:
Object
实例,并在最后释放了它们。在实际应用中,你可能需要考虑使用智能指针(如 std::unique_ptr
或 std::shared_ptr
)来自动管理内存。unordered_map
中的元素非常多,可能会导致哈希表的重新哈希(rehashing),这可能会影响性能。解决内存管理问题的示例:
#include <memory>
// 使用std::shared_ptr来管理Object实例
std::unordered_map<int, std::vector<std::shared_ptr<Object>>> map;
// 创建Object实例并插入到map中
map[1].push_back(std::make_shared<Object>(1));
map[2].push_back(std::make_shared<Object>(2));
map[1].push_back(std::make_shared<Object>(3));
// 不需要手动删除对象,当shared_ptr超出作用域时会自动释放内存
在这个改进的例子中,我们使用了 std::shared_ptr
来自动管理 Object
实例的生命周期,这样就不需要手动删除对象了。
参考链接: