2012-04-13 3 views
-1

私は以下のコードを含むC++のプログラムを持っています。私はこのようなイテレータからtimeval構造体のメンバーにアクセスするかどうかを知りたい:C++プログラム:キーが名前と3つの他のパラメータであるマップ

time_iter->second.tv_sec 

が正しいかではありません。

static std::map<std::string,struct timeval> name_time_map; 
std::map<std::string,struct timeval>::iterator time_iter; 

time_iter = name_time_map.find(name); 

if (time_iter == name_time_map.end()) { 
    gettimeofday(&tvPrev, NULL); 
    name_time_map[name]=tvPrev; 
} 
else { 
    print("what inserted values have"); 
    gettimeofday(&tvCurrent, NULL); 
    diff = 
    (tvCurrent.tv_usec + 1000000 * tvCurrent.tv_sec) - 
    (time_iter->second.tv_usec + 1000000 * time_iter->second.tv_sec); 

    tvDiff.tv_sec = diff/1000000; 
    tvDiff.tv_usec = diff % 1000000; // micro seconds 
} 

私の懸念は、time_iter->second.tv_secを使用して挿入された値にアクセスすると、所定の構造struct timevalからsecondポイントと仮定許されないことです。

+7

テストしましたか?それは動作しましたか? –

+0

いいえ、私はそれをテストしていません。私はもっ​​と理解するために私のコンテストをここに紹介したかったのです。あるいは、イテレータを使ってあらかじめ定義された構造体メンバにアクセスする他の方法がありますか? – user1044923

+4

テストとは何を意味するのですか?テストする前にここで質問すると、不必要な質問がたくさんあります。 –

答えて

0

はい、正しいです。たとえば、次のコードを実行している:この出力の

#include <map> 
#include <string> 
#include <iostream> 

using namespace std; 

int main() 
{ 
    struct MyStruct 
    { 
     int someValue; 
    }; 
    map<string, struct MyStruct> exampleMap; 
    MyStruct exampleStruct; 
    exampleStruct.someValue = 5; 
    exampleMap["exampleKey"] = exampleStruct; 
    map<string, struct MyStruct>::iterator exampleIterator = exampleMap.find("exampleKey"); 
    cout << exampleIterator->second.someValue; 
} 

結果:

5 
+0

はい - どうもありがとうございます。私の例も働いています。 – user1044923

0

を当初からそれ OKを(かなり威圧的なインデントの慣行を無視して)見えます。これを言って、真実はテスト中です。

+1

これも私の印象でしたが、私たちが見ることのできない他のコードに依存しているので、全体的なコードにコメントするのは難しいです。しかし、彼が求めていることの原則はうまくいくようだ。 – JBentley

関連する問題