次のようなベクトルのベクトルへのペアのマップがあります。
std::map<std::pair<uint16, uint16>, std::vector<std::vector<uint32> > >
マップは、クラスのコンストラクターに取り込まれます。std::vector<std::vector<uint32> >
このクラスは、 (マップ値の部分)へのポインターを返す public メソッドを次のように提供します。
typedef std::pair<uint16, uint16> key;
typedef std::vector<std::vector<uint32> > value;
value* FindValues(key someKey) {
std::map<key, value>::const_iterator it;
it = someStore.find(someKey);
if (it != someStore.end())
return &(value)it->second;
return NULL;
}
これは奇妙なときです。FindValues によって返されたベクトルを反復処理する場合、すべての子ベクトルは、最初の値として大きな負の数 (-1818161232 など) を持ちます。しかし、次のような関数を使用すると:
value FindValues(key someKey) {
std::map<key, value>::const_iterator it;
return someStore.find(someKey)->second;
}
...それなら値は正常です。これは、すべての子ベクトルのインデックス 0 の値に対してのみ発生します。ただし、2 番目の方法では、(明らかな理由で) キーが見つからない場合、アプリケーションはセグメンテーション違反を起こします。私は何を間違っていますか?