如何将元素插入 std::unordered_map<int, vector<Object*>>
How do I insert a element into a std::unordered_map<int, vector<Object*>>
>我正在尝试创建指向我的对象的指针数组的哈希。
哈希键是对象类型的 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,这就是密钥不存在时发生的情况。
所以我想我需要先创建密钥,然后添加到向量:
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*>());
通过使用这种方法,元素是就地构造的(即,不执行复制或移动操作)。
我还包括指向insert
和emplace
文档的链接。
我认为这是一种简单的方法。我的示例将创建一个unordered_map字符串作为键,整数向量作为值。
unordered_map<string,vector<int>> keys;
keys["a"] = vector<int>(); // Initialize key with null vector
keys["a"].push_back(1); // push values into vector.
keys["a"].push_back(5);
for(int i : keys["a"] ){
cout << i << "t";
}
我认为你可以通过以下方式简化它
drawQueue[type].push_back(my_obj);
如果找不到密钥,操作员[]
将为您插入。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中