Sorting Multidimensional Array

I

Index

Hi, I have a 4 dimensional array and I want to sort it by the first two
columns emulating an ORDER BY clause to some extent.Any suggestion?

The original Array is:

Row1-> 4 8 2 9
Row2-> 4 5 5 3
Row3-> 3 9 8 7
Row4-> 8 2 4 8

The sorted array should look:

Row1-> 3 9 8 7
Row2-> 4 5 5 3
Row3-> 4 8 2 9
Row4-> 8 2 4 8

In fact the columns upon which the sorting is to be done is also
dynamic.
Please provide me some efficient algo or implementation.The data to be
handled is rather huge.So efficiency is a vital requirement.
Thanks.
 
I

Ian Collins

Index said:
Hi, I have a 4 dimensional array and I want to sort it by the first two
columns emulating an ORDER BY clause to some extent.Any suggestion?

The original Array is:

Row1-> 4 8 2 9
Row2-> 4 5 5 3
Row3-> 3 9 8 7
Row4-> 8 2 4 8

The sorted array should look:

Row1-> 3 9 8 7
Row2-> 4 5 5 3
Row3-> 4 8 2 9
Row4-> 8 2 4 8

In fact the columns upon which the sorting is to be done is also
dynamic.
Please provide me some efficient algo or implementation.The data to be
handled is rather huge.So efficiency is a vital requirement.

Store your data in a struct and define a < operator for the struct based
on your sort rules. Then shove the data structs into a set.

Something like:

struct Data
{
int a, b, c, d, e;

bool operator<( const Data& ) const;
};

bool Data::eek:perator<( const Data& data ) const
{
return (a < data.a) ? true : (a == data.a) ? data.b > b : false;
}

If you want greater efficiency, create a smart pointer type for Data
with its own < operator and put these in the set.
 
I

Ian Collins

Ian said:
If you want greater efficiency, create a smart pointer type for Data
with its own < operator and put these in the set.
I should have added - be sure to profile both options and don't bother
with the second unless you realy have to!
 
R

Roland Pibinger

Hi, I have a 4 dimensional array and I want to sort it by the first two
columns emulating an ORDER BY clause to some extent.Any suggestion?

The original Array is:

Row1-> 4 8 2 9
Row2-> 4 5 5 3
Row3-> 3 9 8 7
Row4-> 8 2 4 8

The sorted array should look:

Row1-> 3 9 8 7
Row2-> 4 5 5 3
Row3-> 4 8 2 9
Row4-> 8 2 4 8

In fact the columns upon which the sorting is to be done is also
dynamic.
Please provide me some efficient algo or implementation.The data to be
handled is rather huge.So efficiency is a vital requirement.
Thanks.

It's not possible to use qsort or std::sort directly because arrays
are not first class objects in C/C++. You should use a struct wrapper
for your Rows as vaguely indicated by Ian Collins.

Best wishes,
Roland Pibinger
 
I

Ian Collins

Roland said:
It's not possible to use qsort or std::sort directly because arrays
are not first class objects in C/C++. You should use a struct wrapper
for your Rows as vaguely indicated by Ian Collins.
vaguely?

"Store your data in a struct and define a < operator for the struct
based on your sort rules."

I guess I could have shouted :)
 
P

Phlip

Ian said:

Arrays are not first class objects?

template<class T, const size_t extent>
size_t
extent_of(T(&)[extent]) { return extent; }

RP meant that arrays are tricky to use as first class objects, and that
those sorters require a wrapper...
 
R

Roland Pibinger

Arrays are not first class objects?

template<class T, const size_t extent>
size_t extent_of(T(&)[extent]) { return extent; }

I don't know what you want to demonstrate. The original problem,
sorting a 2-dimensional array (preferably with Standard facilities
like sort or qsort), is still unresolved in the currend thread.

Best regards,
Roland Pibinger
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top