Re: Help Novice sorting a vec and mantaint the relationship with a Matrix!
"Pino" <beltenebroso@quipo.it> wrote in message
news:1181737246.175491.47650@e26g2000pro.googlegroups.com...
HI all,
I am learning c++ ( just 1 month) and would want an aid for a code.
I have a integer vector of length N.
ie
3
3
3
4
4
1
1
1
1
1
6
6
I have a matrix of N rows and K columns associated to the vector ie
the first element of the integer vect is 3 and this corresponds the
first lirow of the matrix.
I must sort the integer vect (without suppress the duplicate
numbers ie 1 1 1 1 1 ..), but I must maintain the relatioship with
the matrix. Number 1 is at the 6th row, ..sorting the vector 1 will
be the first element but now the 6 th rows of the matrix should
"move" to the 1st matrix row.
I use matrix TNT library, but I could use also a vett of vett (stl)
if you suggest as to write it.
an aid? thanks
maybe is something about multimap .. but i cant write 1 line of code
about that!
You have an interger vector of length N, each interger has associated data
with it. How about a class/ structure? I see from a later post you have a
list of doubles associated.
The normal way I woudl keep data together would be to put them in a
structure or a class. Then when they're sorted, they stay together.
I just threw this together to give you idea. It is not optimized.
Output is:
*** Before sort:
10 10.5 10.5 10.3 10.7
5 5.5 5.5 5.3 5.7
11 11.5 11.5 11.3 11.7
*** After sort:
5 5.5 5.5 5.3 5.7
10 10.5 10.5 10.3 10.7
11 11.5 11.5 11.3 11.7
#include <vector>
#include <algorithm>
#include <iostream>
struct MyData
{
int N;
std::vector<double> Data;
};
bool MyDataLessThan( MyData& lhs, MyData& rhs )
{
return lhs.N < rhs.N;
}
typedef std::vector<MyData> TableVec;
void ShowTable( const TableVec& Table )
{
for ( TableVec::const_iterator it = Table.begin(); it != Table.end(); ++
it )
{
std::cout << it->N << " ";
for ( std::vector<double>::const_iterator dit = it->Data.begin();
dit != it->Data.end(); ++ dit )
std::cout << *dit << " ";
std::cout << "\n";
}
}
int main()
{
TableVec Table;
MyData Entry;
Entry.N = 10;
Entry.Data.push_back( 10.5 );
Entry.Data.push_back( 10.5 );
Entry.Data.push_back( 10.3 );
Entry.Data.push_back( 10.7 );
Table.push_back( Entry );
Entry.Data.clear();
Entry.N = 5;
Entry.Data.push_back( 5.5 );
Entry.Data.push_back( 5.5 );
Entry.Data.push_back( 5.3 );
Entry.Data.push_back( 5.7 );
Table.push_back( Entry );
Entry.Data.clear();
Entry.N = 11;
Entry.Data.push_back( 11.5 );
Entry.Data.push_back( 11.5 );
Entry.Data.push_back( 11.3 );
Entry.Data.push_back( 11.7 );
Table.push_back( Entry );
std::cout << "*** Before sort:\n";
ShowTable( Table );
std::sort( Table.begin(), Table.end(), MyDataLessThan );
std::cout << "*** After sort:\n";
ShowTable( Table );
}