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);
archie14
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.
... I "solved" the problem by declaring static comparison method and static member variable to use inside comparison method. Result works, but it is ugly. Question remains - how to define a function object without falling to the static member usage?
2010/8/5 archie14
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; };
Try making your operator const: bool operator<(const A& v1, const A& v2) *const* Roman Perepelitsa.
Roman Perepelitsa
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); } ... };
Try making your operator const: bool operator<(const A& v1, const A& v2) const
Roman Perepelitsa.
No, it did not work. Complains that binary 'operator <' has too many parameters
2010/8/5 archie14
Roman Perepelitsa
writes: 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); } ... };
Try making your operator const: bool operator<(const A& v1, const A& v2) const
Roman Perepelitsa.
No, it did not work. Complains that
binary 'operator <' has too many parameters
Can you post your exact code and exact error message? Roman Perepelitsa.
archie14 skrev:
Roman Perepelitsa
writes: 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); } ... }; Try making your operator const: bool operator<(const A& v1, const A& v2) const
Roman Perepelitsa.
No, it did not work. Complains that
binary 'operator <' has too many parameters
Indeed, when defining the comparison operator as a member you need to supply only one argument. HTH -Thorsten
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
participants (4)
-
archie14
-
Roman Perepelitsa
-
Thorsten Ottosen
-
Tim Moore