C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Multiple sort?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++)
View previous topic :: View next topic  
Author Message
BCC
Guest





PostPosted: Thu Jul 22, 2004 11:00 pm    Post subject: Multiple sort? Reply with 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


Back to top
Mike Wahler
Guest





PostPosted: Fri Jul 23, 2004 1:12 am    Post subject: Re: Multiple sort? Reply with quote




"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





PostPosted: Fri Jul 23, 2004 8:32 pm    Post subject: Re: Multiple sort? Reply with quote



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
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++) All times are GMT
Page 1 of 1

 
 


Powered by phpBB © 2001, 2006 phpBB Group