2011-10-19 11 views
0
typedef map<int, string> iMap; 
typedef map<double, innerMap> OutMap; 

OutMap mx; 

map<double, iMap >::iterator it_out; 
map<int, string>::iterator it_i; 

for (it_out=mx.begin() ; it_out != mx.end(); it_out++) { 
    cout << "\n\nNew element\n" << (*it_out).first << endl; 
    for(it_i=(*it_out).second.begin(); it_i != (*it_out).second.end(); it_out++) 
    cout << (*it_i).first << " => " << (*it_i).second << endl; 
} 

私は上記のコードが問題ないと確信しています... パフォーマンス上の問題はありますか?C++で地図内の地図にアクセスする方法..?パフォーマンスの問題?

+0

それは依存します。どのくらい速く、どのくらい速くしたいですか? –

+1

あなたはもっと深く進む必要があります... –

+0

'std :: map'は全体的にかなり速いですが、十分にパフォーマンスがありませんか? 'std :: map'の順序を必要としない場合、C++ 11(そして多くの実装はすでに同様の機能を提供しています)は' std :: unordered_map'を提供します。 – birryree

答えて

3

それはあなたが++it_out代わりのit_out++すなわち、代わりにポストインクリメントのプレインクリメントを使用することができる

  • 除いて、さらに向上させることはできません。
  • endlの代わりに'\n'を使用することができます。 '\n'を使用すると、endlが最初に出力バッファに'\n'を格納し、それを宛先(この場合はstdout)にフラッシュするため、出力動作のパフォーマンスが妥当なマージンで向上します。あなたは、内側forループで(it_outではなく)it_iをインクリメントする必要があり

注意。私はそれがタイプミスだと思う。