-1

以下のコードを含む C++ のプログラムがあります。timeval次のようにイテレータから構造体のメンバーにアクセスするかどうかを知りたい:

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が許可されない可能性があることです。secondstruct timeval

4

2 に答える 2

0

最初から、それは問題ないように見えます(かなり威圧的なインデントの慣行を無視します)。そうは言っても、真実はテストの中にあります。

于 2012-04-13T14:33:52.803 に答える
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
于 2012-04-13T14:25:22.050 に答える