Boost logo

Boost Users :

Subject: Re: [Boost-users] ptr_vector sort usage
From: Tim Moore (tim_at_[hidden])
Date: 2010-08-05 11:02:26


On 8/4/2010 8:12 PM, archie14 wrote:
> I can't figure out how to use "sort" method in ptr_vector with the function
> object. Operator< should be defined, but for various reasons I cant define it
> in the class A, and I have to do the comparison between the A values using
> some other values.
>
> Example:
>
> class A
> {
> public:
> int i;
> };
>
> class Compare
> {
> public:
> Compare (int i) : _i(i){}
> //this does not compile, but what's the proper way to define
> // function object for the sort method in ptr_vector?
> bool operator<(const A& v1, const A& v2)
> {
> return (v1.i> v2.i)&&(_i != 1);
> }
> private:
> int _i;
> };
>
> ptr_vector<A> lst;
> Compare cmp(3);
> lst.sort(cmp);
>
>

The following works for me:

#include <iostream>
#include <functional>
#include <boost/ptr_container/ptr_vector.hpp>

struct A {
   A(int i) : _i(i) { }

   int _i;
};

struct Compare : std::binary_function<A,A,bool> {
   Compare(int i) : _i(i) { }

   bool operator()(const A& v1, const A& v2) const {
     return (v1._i < v2._i) && (_i != 1);
   }

   int _i;
};

int main() {
   boost::ptr_vector<A> lst;
   lst.push_back(new A(3));
   lst.push_back(new A(2));
   lst.push_back(new A(1));

   Compare cmp(3);
   lst.sort(cmp);

   boost::ptr_vector<A>::iterator a = lst.begin();
   while (a != lst.end()) {
     std::cout << a++->_i << std::endl;
   }
}


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net