 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
BCC Guest
|
Posted: Thu Jul 22, 2004 11:00 pm Post subject: Multiple sort? |
|
|
Hi,
I'm looking for some way to do a multiple sort on a vector of objects based
on the contents of the objects. For example if my vector is of these
objects:
class MyClass
{
public:
double value1;
double value2;
double value3;
};
So I would want to sort by each value in combination...
Is there an existing function to do this already somewhere? Do I need to
roll my own? Any suggestions for the fastest algorithm to use for this
(websites or books)?
Thanks,
B
|
|
| Back to top |
|
 |
Mike Wahler Guest
|
Posted: Fri Jul 23, 2004 1:12 am Post subject: Re: Multiple sort? |
|
|
"BCC" <bryan (AT) akanta (DOT) com> wrote
| Quote: | Hi,
I'm looking for some way to do a multiple sort on a vector of objects
based
on the contents of the objects. For example if my vector is of these
objects:
class MyClass
{
public:
double value1;
double value2;
double value3;
};
So I would want to sort by each value in combination...
Is there an existing function to do this already somewhere?
|
There is ('std::sort', declared by <algorithm>), but you need
to help. Define appropriate comparison operators ('operator<()'),
each of which you pass as an argument to 'std::sort'.
| Quote: | Do I need to
roll my own?
|
Only part of it.
| Quote: | Any suggestions for the fastest algorithm to use for this
|
I'd use 'std::sort', and only pursue other options if it
proved insufficient.
| Quote: | (websites or books)?
|
www.josuttis.com/libbook
-Mike
|
|
| Back to top |
|
 |
rossum Guest
|
Posted: Fri Jul 23, 2004 8:32 pm Post subject: Re: Multiple sort? |
|
|
On Thu, 22 Jul 2004 23:00:37 GMT, "BCC" <bryan (AT) akanta (DOT) com> wrote:
| Quote: | Hi,
I'm looking for some way to do a multiple sort on a vector of objects based
on the contents of the objects. For example if my vector is of these
objects:
class MyClass
{
public:
double value1;
double value2;
double value3;
};
So I would want to sort by each value in combination...
Is there an existing function to do this already somewhere? Do I need to
roll my own? Any suggestions for the fastest algorithm to use for this
(websites or books)?
Thanks,
B
#include <algorithm |
#include
#include <cstdlib>
class MyClass
{
public:
double value1;
double value2;
double value3;
// Friends not necessary with public data,
// required with private data.
friend bool less1(const MyClass& a, const MyClass& b);
friend bool less2(const MyClass& a, const MyClass& b);
friend bool less3(const MyClass& a, const MyClass& b);
friend bool less_sum(const MyClass& a, const MyClass& b);
};
inline bool less1(const MyClass& a, const MyClass& b)
{ return a.value1 < b.value1; }
inline bool less2(const MyClass& a, const MyClass& b)
{ return a.value2 < b.value2; }
inline bool less3(const MyClass& a, const MyClass& b)
{ return a.value3 < b.value3; }
inline bool lessSum(const MyClass& a, const MyClass& b)
{ return (a.value1 + a.value2 + a.value3) < (b.value1 +
b.value2 + b.value3); }
main() {
std::vector
// Sort by value1
std::sort(mcVec.begin(), mcVec.end(), less1);
// Sort by value2
std::sort(mcVec.begin(), mcVec.end(), less2);
// Sort by value3
std::sort(mcVec.begin(), mcVec.end(), less3);
// Sort by sum of all three values
std::sort(mcVec.begin(), mcVec.end(), lessSum);
return EXIT_SUCCESS;
} // end main()
--
The ultimate truth is that there is no Ultimate Truth
|
|
| Back to top |
|
 |
Powered by phpBB © 2001, 2006 phpBB Group
|