2017-07-19 14 views
0

マップループのマップ中に、データを挿入する正しい方法は何ですか?私はこのようなマップ(およびその作業良い)の私のマップにいくつかのデータを挿入する1つの関数内で自分のコードの最初の瞬間にC++ - マップループのマップにデータを挿入

:この私のマップサイズ後

outMap[TYPE_REQ_USER][req->number] = req; 

は1

です2番目の瞬間、他の関数の中で、私はマップを反復する必要があります。もし私がキーを見つけたら、TYPE_REQ_USER私はマップのマップに新しいデータを追加する必要があります。私はこのようにしてみてくださいしかし、この後、私はマップのサイズを印刷し、我々はデータを挿入するためのマップループのその1と2ではなく(予想される)

マイマップを言った:

for (outMap_t::iterator itOutMap = outMap.begin(); itOutMap != outMap.end(); ++ itOutMap) 
{ 
     for (intMap_t::iterator itInMap = itOutMap->second.begin(); itInMap != itOutMap->second.end(); ++itInMap) 
     { 
     if (itOutMap->first == TYPE_REQ_USER) 
     { 
      //map insert 
      outMap[TYPE_REQ_USER][req->number] = req; 
     } 
     } 
} 

だから何が私の中に間違っていますループインサート?

EDIT 2

だから今、同じキー(TYPE_REQ_USER)のために私は2つの異なる要素を持つことができます。

最初の繰り返しで、私がやるので、私は、マップを反復処理し、私は、セグメンテーションフォールトエラーを抱えているキーの要素を削除しようとしているときに知っている:

qnRunningType_JobId.erase(itOutMap)。

しかし

+0

地図の地図を関数に渡しますか?関数内で永続的な変更を加えないように、コピーしている可能性があります。 また、新しい値を追加するのではなく、誤って値を上書きしていますか? – hnefatl

+0

Nop、マップのマップは、私は関数を持っているクラスに属しているため。だから、地図のマップを呼び出すだけ – RMRMaster

+0

いくつかのコードを投稿してください - 2つの関数の関連するビットとそれらがメンバーであるクラス。 – hnefatl

答えて

1

使用

を(コメントは、完全性のために答えるために変換された)..私はitOutMapを削除しようとしているので、2回目の反復では、私はsementationフォールトエラーを持っているが、我々はすでに最初の反復で削除しますstd::map、既に存在するアイテムを挿入するとは既存のアイテムを上書きするになります。 std::map::insertを使用してアイテムを上書きしたかどうかを確認し、返されたペアの2番目のアイテムを確認することができます(hereを参照)。

+0

ありがとうございます。私はすでにこの問題を解決しています。繰り返しループを挿入すると、私はそれを繰り返します。 outMap [it-> first] [req-> number] = req; it-> firstはTYPE_REQ_USERに等しいので、同じTYPE_REQ_USERでは2つの異なる要素があります。 私の新しい問題を見るには、私の編集2を見てください。 – RMRMaster

+0

忘れました..私はすでに解決しています。助けてくれてありがとう – RMRMaster

関連する問題