A működő kód:
template < typename _Elem, class _Cmp = std::less<_Elem> >
class SortedList {
std::vector<_Elem> vect;
public:
typedef typename std::vector<_Elem>::const_iterator const_iterator;
typedef typename std::vector<_Elem>::const_iterator const_iterator;
typedef typename std::vector<_Elem>::reverse_iterator reverse_iterator
void insert(const _Elem& e);
// ...
};
template < typename _Elem, class _Cmp >
void
SortedList<_Elem, _Cmp>::insert(const _Elem& e)
{
reverse_iterator it = vect.rbegin();
_Cmp cmp;
for (;it != vect.rend(); ++it) {
if (cmp(*it, e))
break;
}
vect.insert(it.base(), e);
}
És a rossz:
template < typename _Elem, class _Cmp >
void
SortedList<_Elem, _Cmp>::insert(const _Elem& e)
{
reverse_iterator it = vect.rbegin();
for (;it != vect.rend(); ++it) {
if (_Cmp(*it, e))
break;
}
vect.insert(it.base(), e);
}
Nem igazán jöttem rá, hogy mi a baja a _Cmp(*it, e) kifejezéssel, több, mint fél órámba telt, mire rájöttem, hogy igazából csak az, hogy az típus, és nem pedig változó, tehát nem árt abból egy változó. Persze hibaüzenetből nem derült ki, csak az, hogy nincs ilyen konstruktora (_Elem& , const _Elem&), amikor nekem az operator()(...) kellett volna