mapのvalueでソート

要望その2の話。時間のカウントにはSTLのmapを使ってるらしいのですが、Perlみたいに簡単にvalueでソートできないみたい。仕方ないのでテンプレートを作る。

template <class T1, class T2>
void map_values_sort(std::vector< T2 > &v, std::map< T1, T2 > &m){
     v.clear();
     for(typename std::map<T1, T2>::iterator p=m.begin(); p!=m.end(); p++){
          v.push_back(p->second);
     }
     std::sort(v.begin(), v.end(), std::greater<T2>());
}

もっとスマートに行きそうなんだけどなあ・・・。C++は難しい。std::map::iteratorの前にtypenameをつけないとgccに怒られてしまいます。最初何のことやら分からなかったよ。やっぱC++は難しいわ。