4

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

哈希键是对象类型的 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...

还是我这样做完全错误?

4

2 回答 2

10

You are not using insert in the proper way. This should work:

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

If using C++11, the previous statement can be simplified to:

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

By using this approach the element is constructed in-place (i.e., no copy or move operations are performed).

I also include links to the documentation for insert and emplace.

于 2012-06-18T10:58:03.983 回答
4

我认为这是一个简单的方法。我的示例将创建一个 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";
}
于 2017-11-21T01:58:04.783 回答