2016-04-01 28 views
-3

私は患者IDのマップを調べ、一致するものを見つけて、(同じ患者の)結果の各ペアについて差の二乗を見つけようとしています。しかし、私は "itid = nx; itid!= mymap.end(); itid ++){for" itid "iterator}の問題を抱えています。私が "itid"でコードを取り出すと、うまく動作します。私はプログラミングの初心者ですので、アドバイスをいただければ幸いです!C++のマップイテレータで問題が発生しました

map <int,struct testInfo> mymap; 
map <int,struct testInfo>:: iterator it; 
pair<map<int,struct testInfo>::iterator,bool> ret; 
map <int,struct testInfo>:: iterator itid; 



    int arraySize = 10000; 
    double diffsq[arraySize]; 
    int count = 1; 

    for (it=mymap.begin() ; it != mymap.end(); it++) { 

     auto nx = next(it); 

     //comparing each patientID to the next patientID 
     if ((it->second.patientID == nx->second.patientID) && it->second.patientID != 0) { 

      for (itid = nx; itid != mymap.end(); itid++) { 

       if ((it->second.patientID == itid->second.patientID) && it->second.patientID != 0) { 

        diffsq[count] = pow((it->second.result - itid->second.result), 2); 
        count++; 

       } else 
        itid = mymap.end(); 

      } 

     } 

    } 
+1

'nx'の初期化後、' nx'は終了イテレータであるかもしれませんが、あなたはそれをチェックしません。 –

+0

intはmap で何を表していますか? –

+0

私は「いくつかの問題」は 'itid = mymap.end();'(これは 'itid ++'との悪い組み合わせです)によって引き起こされたと考えます。なぜその行が存在するのですか? – molbdnilo

答えて

0

私はnextが一定イテレータを与えるとitidがconstantではありません...あなたはauto nxがitidに同じしようとやったのと同じ方法でそれを試すので、それがあると思います。 forループ内の auto itid = nx

+0

こんにちはAjay、私は実際に自動itid = nxを最初に試して、それは私にそれを変更した理由であるエラーを与えました – aspn

+0

@aspnどのエラー? –

+0

@aspn現在の問題は実行時間ですか? 'auto itid = nx'のときにどんなエラーがあったでしょうか? – Ajay

関連する問題