4

オブジェクトへのポインターの配列のハッシュを作成しようとしています。

ハッシュ キーはオブジェクトの型の int であり、配列はレンダリングするオブジェクトのリストです。

私がやろうとしていることは次のとおりです。

unordered_map<int, vector<Object*> > drawQueue;
drawQueue.clear(); // new empty draw queue

for ( ... ) {
   drawQueue.at(type).push_back(my_obj);
}
 

そのため、キーが存在しない場合に発生するout_of_boundsという例外が発生するため、STLのニュアンスに十分に精通していません。

したがって、最初にキーを作成してから、ベクターに追加する必要があると考えました。

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

insert正しい使い方をしていません。これはうまくいくはずです:

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

C++11 を使用している場合、前のステートメントは次のように簡略化できます。

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

このアプローチを使用すると、要素はインプレースで構築されます (つまり、コピーまたは移動操作は実行されません)。

insertおよびのドキュメントへのリンクも含まれていますemplace

于 2012-06-18T10:58:03.983 に答える