所以从概念上讲,我正在尝试创建一个指向我的对象的指针数组的散列。
哈希键是对象类型的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
的插入......
或者我这样做是完全错误的?
任何暗示明智的人?
答案 0 :(得分:3)
您没有以正确的方式使用insert
。这应该有效:
drawQueue.insert(std::make_pair(type, std::vector<Object*>()));
如果使用C ++ 11,之前的语句可以简化为:
drawQueue.emplace(type, std::vector<Object*>());
通过使用这种方法,元素就地构建(即,不执行复制或移动操作)。
答案 1 :(得分:1)
我认为这是一种简单的方法。我的示例将创建一个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";
}