use*_*416 4 c++ stl unordered-map vector
我正在尝试创建指向我的对象的指针数组的散列。
哈希键是对象类型的 int,数组是要呈现的对象列表。
我想要做的是:
unordered_map<int, vector<Object*> > drawQueue;
drawQueue.clear(); // new empty draw queue
for ( ... ) {
drawQueue.at(type).push_back(my_obj);
}
Run Code Online (Sandbox Code Playgroud)
所以我对 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);
}
Run Code Online (Sandbox Code Playgroud)
但是现在我真的迷路了,因为我不知道如何创建/初始化/vector插入unordered_map...
还是我这样做完全错误?
您没有insert以正确的方式使用。这应该有效:
drawQueue.insert(std::make_pair(type, std::vector<Object*>()));
Run Code Online (Sandbox Code Playgroud)
如果使用C++11,前面的语句可以简化为:
drawQueue.emplace(type, std::vector<Object*>());
Run Code Online (Sandbox Code Playgroud)
通过使用这种方法,元素就地构建(即,不执行复制或移动操作)。
我认为这是一个简单的方法。我的示例将创建一个 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";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32078 次 |
| 最近记录: |