入力がそのコンテナの 2 つの const_iterator である、特定のコンテナで最も一般的な要素を見つける関数を作成しました (以下のコードを参照)。ただし、この関数をfindMostFrequent(ivec.begin(), ivec.end())
where ivec
is avector<int>
で呼び出すと、コンパイラはテンプレート引数を推測できません。で関数を呼び出すとfindMostFrequent< vector<int> >(ivec.begin(), ivec.end())
問題なく動作しますが、面倒なようです。インスタンス化するテンプレートをコンパイラに見つけさせる方法はありますか?
template <typename T> typename T::value_type findMostFrequent(typename T::const_iterator beg, typename T::const_iterator end)
{
// T is the type of container, T::value_type is the type which is stored in the container
typename T::size_type current_streak = 0, max_streak = 0;
T::value_type max_so_far;
for (T::const_iterator iter = beg; iter != end; ++iter)
{
current_streak = count(beg, end, *iter);
if ( current_streak > max_streak )
{
max_so_far = *iter;
max_streak = current_streak;
}
}
return max_so_far;
}