On Sun, Dec 17, 2006 at 05:14:14PM +0300, Alexey Tourbin wrote: > On Sun, Dec 17, 2006 at 04:43:40PM +0300, Alexey Tourbin wrote: > > +static inline bool > > +vercmpOrder(const pkgCache::VerIterator &a, const pkgCache::VerIterator &b) > > +{ > > + return a.CompareVer(b) < 0; > > +} > > Кстати вот тут должно быть "<" или "<="? > Что-то у Страуса примера на сортировку с предикатом порядка нету. Ага, тут похоже должно быть "<=". Дело в том, что всего одной операции "<=" достаточно, чтобы логически вывести все остальные операции сравнения. (==)(a,b) := (a<=b)&&(b<=a) (>=)(a,b) := !(b<=a) (!=)(a,b) := !(a==b) (<)(a,b) := (a<=b)&&(a!=b) (>)(a,b) := (a>=b)&&(a!=b) А в случае с одной только операцией "<" такой ляпоты не получается, потому что не удается логически вывести равенство. А может я чего-то не понимаю? Кто точно знает? > > +done: > > + // best versions go first > > + found.sort(vercmpOrder); > > + found.unique(); > > + found.reverse(); > > + return found; > > +}