00001 #include "osl/container/moveLogProbVector.h" 00002 #include <algorithm> 00003 #include <iostream> 00004 00005 // 厳密な整列は特に必要ではない 00006 // #define RIGID_SORT_OF_MOVE 00007 00008 #ifndef MINIMAL 00009 std::ostream& osl::container::operator<<(std::ostream& os,MoveLogProbVector const& mv) 00010 { 00011 os<< "LogProbVector" << std::endl; 00012 for (const MoveLogProb& move: mv) 00013 { 00014 os << move << std::endl; 00015 } 00016 return os << std::endl; 00017 } 00018 #endif 00019 bool osl::container::operator==(const MoveLogProbVector& l, const MoveLogProbVector& r) 00020 { 00021 return l.size() == r.size() 00022 && std::equal(l.begin(), l.end(), r.begin()); 00023 } 00024 00025 namespace osl 00026 { 00027 template <bool isLess> 00028 struct LogProbCompare 00029 { 00030 bool operator()(const MoveLogProb& l, const MoveLogProb& r) const 00031 { 00032 #ifdef RIGID_SORT_OF_MOVE 00033 if (l.logProb() != r.logProb()) 00034 { 00035 #endif 00036 if (isLess) 00037 return l.logProb() < r.logProb(); 00038 else 00039 return l.logProb() > r.logProb(); 00040 #ifdef RIGID_SORT_OF_MOVE 00041 } 00042 return l.move() > r.move(); 00043 #endif 00044 } 00045 }; 00046 } 00047 00048 void osl::container::MoveLogProbVector::sortByProbability() 00049 { 00050 std::sort(begin(), end(), LogProbCompare<true>()); 00051 } 00052 void osl::container::MoveLogProbVector::sortByProbabilityReverse() 00053 { 00054 std::sort(begin(), end(), LogProbCompare<false>()); 00055 } 00056 00057 const osl::MoveLogProb* osl::container::MoveLogProbVector::find(Move m) const 00058 { 00059 for (const_iterator p=begin(); p!=end(); ++p) 00060 if (p->move() == m) 00061 return &*p; 00062 return 0; 00063 } 00064 00065 // ;;; Local Variables: 00066 // ;;; mode:c++ 00067 // ;;; c-basic-offset:2 00068 // ;;; End: