|
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