0

タイプのマップがありstd::map<std::string, std::vector<MyClass>>ます。マップは、ベクトルを作成し、GUID をペアとしてマップに配置する方法で塗りつぶされます。次に、関数を呼び出し、挿入したばかりのベクトルをそれに与えて、ベクトルを埋めたいと思います。次のようになります。

{
    std::string guid = "aGUID"
    std::vector<MyClass> vec_myClass(0);
    my_map[guid] = vec_myClass;
    std::vector<MyClass>& vec_ref = my_map[guid];

    FillVector(vec_ref);    
}

FillVector(std::vector<MyClass>& vec)  { vec.push_back(...); }

[] 演算子は の項目の参照を返すと思いますmy_map。これを関数に渡して操作することができますが、この時点でアプリケーションがクラッシュします。関数 FillVector が多くのアイテムをベクターに入れるので、コピー作業を避けたいので、ベクターを最初にマップに入れています (空の場合)。私の間違いはどこですか?関数への参照ごとに参照を渡すのは間違っているのでしょうか? または、これに対する明らかにより良い解決策はありますか?ここでは、ポインターよりも参照を好みます。Thx、そしてすべての最高。

4

2 に答える 2

2

そのコードはすべて次のように単純化されます。

{
    std::string guid = "aGUID"
    FillVector(my_map[guid]);    
}

ところで。あなたの問題はここにはないようですが、コードでは表示されません...

于 2013-04-02T10:21:39.683 に答える
0

std::map 演算子は、キーが存在しない場合、キーの値を内部的に作成します。このリンクを参照してください。関数への参照を渡すことは問題ありません。問題はコードのどこかにあるようです。

于 2013-04-02T10:30:10.753 に答える