我正在尝试创建指向我的对象的指针数组的散列。
散列键是对象类型的 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);
}
但现在我真的迷路了,因为我不知道如何创建/初始化/任何一个空的 vector
到 unordered_map
的插入...
还是我的做法完全错误?
最佳答案
您没有以正确的方式使用insert
。这应该有效:
drawQueue.insert(std::make_pair(type, std::vector<Object*>()));
如果使用C++11,前面的语句可以简化为:
drawQueue.emplace(type, std::vector<Object*>());
通过使用这种方法,元素是就地构造的(即,不执行任何复制或移动操作)。
关于c++ - 如何将元素插入 std::unordered_map<int, vector<Object*>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11081308/