c++ - 如何将元素插入 std::unordered_map<int, vector<Object*>>

标签 c++ stl vector unordered-map

我正在尝试创建指向我的对象的指针数组的散列。

散列键是对象类型的 int,数组是要渲染的对象列表。

我想做的是:

unordered_map<int, vector<Object*> > drawQueue;
drawQueue.clear(); // new empty draw queue

for ( ... ) {
   drawQueue.at(type).push_back(my_obj);
}
 

所以我对 STL 东西的细微差别还不够熟悉,因为我得到一个异常,说 out_of_bounds,这是当 key 不存在时发生的情况。

所以我想我需要先创建 key ,然后添加到 vector 中:

if (drawQueue.count(type)) {
    // key already exists
    drawQueue.at(type).push_back(my_obj);
} else {
    //key doesn't exist
    drawQueue.insert(type, vector<Object*>); // problem here
    drawQueue.at(type).push_back(my_obj);
}

但现在我真的迷路了,因为我不知道如何创建/初始化/任何一个空的 vectorunordered_map 的插入...

还是我的做法完全错误?

最佳答案

您没有以正确的方式使用insert。这应该有效:

drawQueue.insert(std::make_pair(type, std::vector<Object*>()));

如果使用C++11,前面的语句可以简化为:

drawQueue.emplace(type, std::vector<Object*>());

通过使用这种方法,元素是就地构造的(即,不执行任何复制或移动操作)。

我还包含指向 insert 文档的链接和 emplace .

关于c++ - 如何将元素插入 std::unordered_map<int, vector<Object*>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11081308/

相关文章:

vector - 是否有更有效的方法来调整表示为 Vec<T> 的二维网格的大小?

c++ - 获取被删除文件名的API

c++ - 想知道我是否可以为此使用 STL 智能指针

c++ - 为什么当我创建一个包含 N 个对象的 vector 时,CTOR 没有被调用 N 次?

c++ - 现代 OpenGL : How to get the vector position of the cube?

c++ - STL vector : undefined behaviour when calling data() on a temporary?

c++ - 在 WinAPI 项目中管理字符串资源的现代方法

c++ - Asio 没有收到来自远程系统的回复

c++ - Linux串口通信异常?

c++ - 在STL映射中通过引用查找并返回