2017-03-20 17 views
0

をマップするために、私は、データ用の構造体のキーとしてのwstringでマップを作成しましたが、私はマップのデータを表示するためのイテレータを実行しようとしたとき、それは私が最初に追加のデータをスキップします。ここにコードがあります。データの格納が

typedef struct 
{ 
public: 
wstring source; 
wstring synthetic; 
int operation; 
int divisor; 
}SSParams; 

map<wstring, SSParams>SSParameters; 

for(int x=0;x<sizeofdata;x++) 
{ 
SSParameters[srcsymbol[x]].source = srcsymbol[x]; 
SSParameters[srcsymbol[x]].synthetic = synsymbol[x]; 
SSParameters[srcsymbol[x]].operation = operation[x]; 
SSParameters[srcsymbol[x]].divisor = divisor[x]; 
m_api->LoggerOut(Log, L"Source: %s Synth: %s, Operation: %d, Value: %d, Total: %d", SSParameters[srcsymbol].source, SSParameters[srcsymbol].synthetic, SSParameters[srcsymbol].operation, SSParameters[srcsymbol].divisor,SSParameters.size()); 
} 

map<wstring, SSParams>::iterator iter; 
for (iter = SSParameters.begin(); iter != SSParameters.end(); ++iter) 
{ 
    m_api->LoggerOut(Log, L"Data Source: %s, Synth: %s, Operation: %d, Divisor: %d", iter->second.source, iter->second.synthetic, iter->second.operation, iter->second.divisor); 
} 

出力(挿入ループ):

Source: HCBC Synth: HCBCx, Operation:1, Value: 100, Total: 1 
Source: HCBC Synth: HCBCv, Operation:1, Value: 100, Total: 1 

出力(イテレータループ):

Data Source: HCBC Synth: HCBCv, Operation:1, Value: 100 

あなたが見ることができるように、私は値を追加だけでなく、使用したマップのキーforループとログは、データを正常に追加したことを示していますが、イテレータを実行しようとすると、データは表示されますが、最初のデータはスキップされます。 srcsymbol以来

+0

これを読んでみると、そのような場合には本当に役立ちます。https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – alexeykuzmin0

+0

入力例、予想出力、実際の出力。 –

+0

変数 "srcsymbol"は変更されていないので、マップには1つの要素しか追加されていないと思います。 –

答えて

1

あなたが使用して挿入されたキーが一意であることをテストすることができ:

for(int x=0;x<sizeofdata;x++) 
{ 
    assert(SSParameters.count(srcsymbol[x])==0); 
    SSParameters[srcsymbol[x]].source = srcsymbol[x]; 

インサートループの出力から<cassert>

+0

地図上のキーは一意でなければならないと言っていますか? – Raven

+0

もちろん、彼らはすべきです。マップは一意のキーを値にマップします。キーが一意でない場合は、既存のエントリを上書きします。それがあなたが望むふるまいでないなら、別のコンテナを使うべきです。 –

+0

はい、 'map'のキーは常に一意であり、キーを再利用すると、そのキーに関連付けられた古い値が上書きされます。 – sp2danny

1

はあなただけで一つの要素を追加し、継続的にその内容を上書きするループ内で変更されません。最終結果;マップは単一の要素しか保持しません。

+0

ことが、申し訳ありません、すべてのループsrcsymbolはたぶん、今あなたがsrcsymbol [X] ''にそれを変更することを異なる値 – Raven

+1

を持っています。前に、それはしなかった。 –

+0

@Raven多分あなたはsrcsymbol [x]を印刷して、それらが異なる値を持っていることを確認してください。 –

0

、srcsymbolを必要とする[X] HCBCに常に等しいです。したがって、プログラムはマップに1つの要素しか追加しませんでした。

関連する問題