boost::mpl::sort で任意のソート
[お題]
boost::mpl::sort を任意の値でソートしたい
#include <boost/mpl/vector.hpp> #include <boost/mpl/sort.hpp> #include <boost/mpl/equal.hpp> #include <boost/mpl/reverse.hpp> #include <boost/mpl/greater.hpp> namespace mpl = boost::mpl; typedef mpl::vector<float, double, char, int> source; typedef mpl::vector<char, float, int, double> expected; template<typename T, typename U> struct less_size{ typedef mpl::bool_<(sizeof(T) < sizeof(U))> type; }; typedef boost::mpl::sort< source, less_size<mpl::_1, mpl::_2> >::type result; BOOST_MPL_ASSERT(( mpl::equal<result, mpl::reverse<expected>::type> )); int main(){}
boost::mpl::sort の第二引数に比較を行う template クラスを渡せば、任意のソートすることが出来ます。
思ったよりも簡単に実装する事が出来ました。
ちなみにアキラ先生の模範解答はこんな感じです。
勝手に載せちゃってスミマセン……
う〜ん、わたしよりも全然スマート。
[boost]
ver 1.45.0
[参照]
http://www.boost.org/doc/libs/1_45_0/libs/mpl/doc/refmanual/refmanual_toc.html