2016-10-27 24 views
1

とベクトルを初期化します。 など。モデル401は、6661,6662,6669,6674; モデル402:6669,6661; などは、私は次のような構造を持っている異なる値

これを取得するにはどの方法が最適ですか?私は例えばshared_ptr<SModelData>用(スマート所有するポインタのいずれかを使用して希望

const multimap<int, SModelData*> models_data = 

+3

私はあなたをお勧めしませんまず第一にあなたの地図内の構造体へのポインタを持っています。第二に、本当に 'std :: multimap'が必要ですか?単一のキーに複数の値を設定できますか?第3に、マップを初期化する方法と非常によく似たベクトルを初期化し、中括弧で囲まれたリストを使って['std :: initializer_list'](http://en.cppreference.com/w/cpp/utility/initializer_list)を作成します。 。ポインタが必要ない場合、途中でコンストラクタは必要ありません。 –

+0

@Someprogrammerdude、タイプを基本マップに変更しました。ありがとうございます。それはinitializer_list(おそらく)でうまくいきます、ありがとうございます。 –

答えて

1

一般的に悪い考えをSTLコンテナに格納所有のポインタをされたが、バグのソース共有所有権セマンティック、または一意の所有権セマンティクの場合はunique_ptr<SModelData>)、または単にSModelDataを使用してください。

さらに、multimapを使用しますか?

おそらくmapの値はちょうど良いでしょうか?

例:

const map<int, SModelData> models_data 

あなたconst mapを初期化するには、あなただけ例えば、C++ 11の初期化子リスト、またはラムダを使用することがあります。

const auto models_data = []() -> map<int, SModelData> { 
    map<int, SModelData> data; 

    // ... Fill your map 

    return data; 
}(); 
+0

ありがとうございました!うん、私はすでにマップにSModelDataの代わりにマルチマップとSModelDataの代わりに移動しました。 –

関連する問題