Help | Site Map
Connecting Tech Pros Worldwide
 
 
LinkBack Thread Tools
  #1  
Old March 27th, 2006, 09:45 PM
jpoloney@gmail.com
Guest
 
Posts: n/a
Default Sorting Multiple Arrays Together in C++

I was wondering if there was a quick and easy way to sort multiple
arrays in C++. What I mean is that, say I have 3 integer arrays. They
are in order by array indices (array1[0] corresponds to array2[0] and
array3[0], etc). I want to do something exactly like the Excel sort of
"Sort by A, then by B, then by C". Meaning, sort array A in ascending
order, then inside of that sort B in ascending order, etc. Here is some
pseudo code for what I'm trying to do:

array1 = [1, 1, 2, 2, 3, 3];
array2 = [2, 1, 2, 1, 2, 1];
array3 = [1, 2, 3, 4, 5, 6];

sort_1_then_2_then_3();

array1 = [1, 1, 2, 2, 3, 3];
array2 = [1, 2, 1, 2, 1, 2];
array3 = [2, 1, 4, 3, 6, 5];

Is there anyway to do this using STL sorts in C++ or would I have to
write this algorithm from scratch?

  #2  
Old March 27th, 2006, 11:55 PM
Daniel T.
Guest
 
Posts: n/a
Default Re: Sorting Multiple Arrays Together in C++

In article <1143495053.888183.79600@i40g2000cwc.googlegroups. com>,
jpoloney@gmail.com wrote:
[color=blue]
> I was wondering if there was a quick and easy way to sort multiple
> arrays in C++. What I mean is that, say I have 3 integer arrays. They
> are in order by array indices (array1[0] corresponds to array2[0] and
> array3[0], etc). I want to do something exactly like the Excel sort of
> "Sort by A, then by B, then by C". Meaning, sort array A in ascending
> order, then inside of that sort B in ascending order, etc. Here is some
> pseudo code for what I'm trying to do:
>
> array1 = [1, 1, 2, 2, 3, 3];
> array2 = [2, 1, 2, 1, 2, 1];
> array3 = [1, 2, 3, 4, 5, 6];
>
> sort_1_then_2_then_3();
>
> array1 = [1, 1, 2, 2, 3, 3];
> array2 = [1, 2, 1, 2, 1, 2];
> array3 = [2, 1, 4, 3, 6, 5];
>
> Is there anyway to do this using STL sorts in C++ or would I have to
> write this algorithm from scratch?[/color]

If you can rearrange your data so that you have one array that contains
objects that have three elements each, then you can use the standard
library functions to do the job using lexicographical_compare and sort.

struct Type {
int rep[3];
};

friend bool operator<( const Type& lhs, const Type& rhs ) {
return lexicographical_compare( lhs.rep, lhs.rep + 3,
rhs.rep, rhs.rep + 3 );
}

Type array[6];
(load the array up with the data.)

sort( array, array + 6 );


--
Magic depends on tradition and belief. It does not welcome observation,
nor does it profit by experiment. On the other hand, science is based
on experience; it is open to correction by observation and experiment.
 

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over network members.
Post your question now . . .
It's fast and it's free

Popular Articles