私はintをキーとして値としてポインタを格納するunordered_mapを持っています。私は鍵の存在を確認する必要があります。キーが利用できない場合は、キーと値を挿入する必要があります。どちらが良いアプローチですか?unordered_mapに値を代入する際の基本的な質問
ありがとうございました。両方の一つで十分であろうマップにクエリを使用するため
unordered_map<int, classA*>testMap;
classA* ptr = testMap[1];
if(ptr == NULL)
testMap[1] = new classA;
OR
unordered_map<int, classA*>::iterator it = testMap.find(1);
if(it == testMap.end())
{
testMap.insert(make_pair(1, new classA));
}
動的に作成された 'classA'インスタンスを' std :: shared_ptr': 'std :: unordered_map>'に保存することをお勧めします。 'std :: make_shared (... ctr params ...)'を使ってインスタンスを作成することができます。これにより、リソースリークの心配が軽減されます。 –
第1のアプローチまたは第2のルックアップを回避するバリアントは、マップ内に有効なヌルポインタを持たないことを確実に言うことができれば、より良いかもしれません。しかし、あなたが前提条件を述べていないので、私は第二の安全なアプローチのために行くだろう。 findの代わりにcount()関数を使用したり、そのローカル変数を取り除いてコードをクリアすることができます。 –