Sorting a list with class for complex types [modified]
-
This program for the first link is not compiling and it is hard to see where the sort is taking place. I will check the other link. -- modified at 13:04 Monday 10th July, 2006
Harold_Wishes wrote:
This program for the first link is not compiling...
Why not? What compiler error are you receiving?
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
-
The second link contains a good example. They are using the <vector> class. I am using the <list> class to store my list. I suppose I can use the vector example to implement what I am trying to do with the <list> class. I will have to think about this because I do not think items in lists can be accessed at random like vectors. Perhaps I am wrong on both accounts. :^) Regards again. HRW -- modified at 13:36 Monday 10th July, 2006
try overiding the < operator of the struct. Chosing between vector and list you need to be careful bcoz the vector reallocates the whole data on push_back if it doesnt has space to expand ,while list is a linked list .so u need to choose according to your ease. just bcoz you cant do sort on it doesnt mean we have to drop it , you can also write sort from scratch. Regards, FarPointer Blog:FARPOINTER
-
Harold_Wishes wrote:
This program for the first link is not compiling...
Why not? What compiler error are you receiving?
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
Well, I hate to place it here, but there were 14 errors. :omg: C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(23) : error C2955: 'list' : use of class template requires template argument list c:\program files\microsoft visual studio\vc98\include\list(415) : see declaration of 'list' C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(23) : error C2133: 'mylist' : unknown size C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(23) : error C2512: 'list' : no appropriate default constructor available C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(23) : error C2262: 'mylist' : cannot be destroyed C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(28) : error C2662: 'push_back' : cannot convert 'this' pointer from 'class std::list' to 'class std::list<_Ty,_A> &' Reason: cannot convert from 'class std::list' to 'class std::list<_Ty,_A>' Conversion requires a second user-defined-conversion operator or constructor C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(30) : error C2662: 'push_back' : cannot convert 'this' pointer from 'class std::list' to 'class std::list<_Ty,_A> &' Reason: cannot convert from 'class std::list' to 'class std::list<_Ty,_A>' Conversion requires a second user-defined-conversion operator or constructor C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(33) : error C2663: 'sort' : 2 overloads have no legal conversion for 'this' pointer C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2955: 'list' : use of class template requires template argument list c:\program files\microsoft visual studio\vc98\include\list(415) : see declaration of 'list' C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2955: 'list' : use of class template requires template argument list c:\program files\microsoft visual studio\vc98\include\list(415) : see declaration of 'list' C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2663: 'begin' : 2 overloads have no legal conversion for 'this' pointer C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2512: 'const_iterator' : no appropriate default constructor available C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2262: 'citer' : c
-
Well, I hate to place it here, but there were 14 errors. :omg: C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(23) : error C2955: 'list' : use of class template requires template argument list c:\program files\microsoft visual studio\vc98\include\list(415) : see declaration of 'list' C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(23) : error C2133: 'mylist' : unknown size C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(23) : error C2512: 'list' : no appropriate default constructor available C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(23) : error C2262: 'mylist' : cannot be destroyed C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(28) : error C2662: 'push_back' : cannot convert 'this' pointer from 'class std::list' to 'class std::list<_Ty,_A> &' Reason: cannot convert from 'class std::list' to 'class std::list<_Ty,_A>' Conversion requires a second user-defined-conversion operator or constructor C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(30) : error C2662: 'push_back' : cannot convert 'this' pointer from 'class std::list' to 'class std::list<_Ty,_A> &' Reason: cannot convert from 'class std::list' to 'class std::list<_Ty,_A>' Conversion requires a second user-defined-conversion operator or constructor C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(33) : error C2663: 'sort' : 2 overloads have no legal conversion for 'this' pointer C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2955: 'list' : use of class template requires template argument list c:\program files\microsoft visual studio\vc98\include\list(415) : see declaration of 'list' C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2955: 'list' : use of class template requires template argument list c:\program files\microsoft visual studio\vc98\include\list(415) : see declaration of 'list' C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2663: 'begin' : 2 overloads have no legal conversion for 'this' pointer C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2512: 'const_iterator' : no appropriate default constructor available C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2262: 'citer' : c
Make it
list<"MyData"> mylist;
Remove the qoutes :) It will work. Regards, FarPointer Blog:FARPOINTER -- modified at 13:54 Monday 10th July, 2006 -
Make it
list<"MyData"> mylist;
Remove the qoutes :) It will work. Regards, FarPointer Blog:FARPOINTER -- modified at 13:54 Monday 10th July, 2006I still could not get it to run. :confused: C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(33) : error C2664: 'void __thiscall std::list >::sort(struct std::greater)' : cannot convert parameter 1 from ' bool (const class MyData &,const class MyData &)' to 'struct std::greater' No constructor could take the source type, or constructor overload resolution was ambiguous C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2955: 'list' : use of class template requires template argument list c:\program files\microsoft visual studio\vc98\include\list(415) : see declaration of 'list' C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2955: 'list' : use of class template requires template argument list c:\program files\microsoft visual studio\vc98\include\list(415) : see declaration of 'list' C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2440: 'initializing' : cannot convert from 'class std::list >::iterator' to 'class std::list<_Ty,_A>::const_iter ator' No constructor could take the source type, or constructor overload resolution was ambiguous C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2262: 'citer' : cannot be destroyed C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(37) : error C2679: binary '!=' : no operator defined which takes a right-hand operand of type 'class std::list >::iterator' ( or there is no acceptable conversion) C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(39) : error C2228: left of '.m_iData' must have class/struct/union type Error executing cl.exe. Sort.exe - 7 error(s), 0 warning(s)
#include <list>
#include <string>
#include <iostream>
#include <algorithm>using namespace std;
class MyData
{
public:
int m_iData;
string m_strSomeOtherData;
};bool MyDataSortPredicate(const MyData& lhs, const MyData& rhs)
{
return lhs.m_iData < rhs.m_iData;
}int main()
{
// Create list
list<MyData> mylist;// Add data to the list
MyData data;
data.m_iData = 3;
mylist.push_back(data);
data.m_iData = 1;
mylist.push_back(data);// Sort the list using predic
-
Well, I hate to place it here, but there were 14 errors. :omg: C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(23) : error C2955: 'list' : use of class template requires template argument list c:\program files\microsoft visual studio\vc98\include\list(415) : see declaration of 'list' C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(23) : error C2133: 'mylist' : unknown size C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(23) : error C2512: 'list' : no appropriate default constructor available C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(23) : error C2262: 'mylist' : cannot be destroyed C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(28) : error C2662: 'push_back' : cannot convert 'this' pointer from 'class std::list' to 'class std::list<_Ty,_A> &' Reason: cannot convert from 'class std::list' to 'class std::list<_Ty,_A>' Conversion requires a second user-defined-conversion operator or constructor C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(30) : error C2662: 'push_back' : cannot convert 'this' pointer from 'class std::list' to 'class std::list<_Ty,_A> &' Reason: cannot convert from 'class std::list' to 'class std::list<_Ty,_A>' Conversion requires a second user-defined-conversion operator or constructor C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(33) : error C2663: 'sort' : 2 overloads have no legal conversion for 'this' pointer C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2955: 'list' : use of class template requires template argument list c:\program files\microsoft visual studio\vc98\include\list(415) : see declaration of 'list' C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2955: 'list' : use of class template requires template argument list c:\program files\microsoft visual studio\vc98\include\list(415) : see declaration of 'list' C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2663: 'begin' : 2 overloads have no legal conversion for 'this' pointer C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2512: 'const_iterator' : no appropriate default constructor available C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2262: 'citer' : c
Gotta watch those angle brackets:
void main( void )
{
// Create list
list<MyData> mylist;
...
for (list<MyData>::const_iterator citer = mylist.begin();
}
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
-
I still could not get it to run. :confused: C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(33) : error C2664: 'void __thiscall std::list >::sort(struct std::greater)' : cannot convert parameter 1 from ' bool (const class MyData &,const class MyData &)' to 'struct std::greater' No constructor could take the source type, or constructor overload resolution was ambiguous C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2955: 'list' : use of class template requires template argument list c:\program files\microsoft visual studio\vc98\include\list(415) : see declaration of 'list' C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2955: 'list' : use of class template requires template argument list c:\program files\microsoft visual studio\vc98\include\list(415) : see declaration of 'list' C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2440: 'initializing' : cannot convert from 'class std::list >::iterator' to 'class std::list<_Ty,_A>::const_iter ator' No constructor could take the source type, or constructor overload resolution was ambiguous C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2262: 'citer' : cannot be destroyed C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(37) : error C2679: binary '!=' : no operator defined which takes a right-hand operand of type 'class std::list >::iterator' ( or there is no acceptable conversion) C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(39) : error C2228: left of '.m_iData' must have class/struct/union type Error executing cl.exe. Sort.exe - 7 error(s), 0 warning(s)
#include <list>
#include <string>
#include <iostream>
#include <algorithm>using namespace std;
class MyData
{
public:
int m_iData;
string m_strSomeOtherData;
};bool MyDataSortPredicate(const MyData& lhs, const MyData& rhs)
{
return lhs.m_iData < rhs.m_iData;
}int main()
{
// Create list
list<MyData> mylist;// Add data to the list
MyData data;
data.m_iData = 3;
mylist.push_back(data);
data.m_iData = 1;
mylist.push_back(data);// Sort the list using predic
Change it in the for loop also . Regards, FarPointer Blog:FARPOINTER
-
Gotta watch those angle brackets:
void main( void )
{
// Create list
list<MyData> mylist;
...
for (list<MyData>::const_iterator citer = mylist.begin();
}
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
how did u bring those mydata in-side the angular brackets . and that horizontal slash in prev post. Regards, FarPointer Blog:FARPOINTER
-
Change it in the for loop also . Regards, FarPointer Blog:FARPOINTER
I decided to pick this apart and comment out the for loop because it is still not obvious to me where the problem is. The for loop seems to declare a pointer and initialize it to point to the beginning of the list and simply prints each item on screen until the pointer reaches the end. That aside I notice there appears to be some conversion type error in the line above with mylist.sort(MyDataSortPredicate); See error message below. :sigh: c:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(33) : error C2664: 'void __thiscall std::list >::sort(struct std::greater)' : cannot convert parameter 1 from ' bool (const class MyData &,const class MyData &)' to 'struct std::greater' No constructor could take the source type, or constructor overload resolution was ambiguous Error executing cl.exe. Sort.exe - 1 error(s), 0 warning(s)
mylist.sort(MyDataSortPredicate);
// Dump the list to check the result
/* for (list::const_iterator citer = mylist.begin();
citer != mylist.end(); ++citer)
{
cout << (*citer).m_iData << endl;
}*/ -
how did u bring those mydata in-side the angular brackets . and that horizontal slash in prev post. Regards, FarPointer Blog:FARPOINTER
FarPointer wrote:
and that horizontal slash in prev post.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
-
I still could not get it to run. :confused: C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(33) : error C2664: 'void __thiscall std::list >::sort(struct std::greater)' : cannot convert parameter 1 from ' bool (const class MyData &,const class MyData &)' to 'struct std::greater' No constructor could take the source type, or constructor overload resolution was ambiguous C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2955: 'list' : use of class template requires template argument list c:\program files\microsoft visual studio\vc98\include\list(415) : see declaration of 'list' C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2955: 'list' : use of class template requires template argument list c:\program files\microsoft visual studio\vc98\include\list(415) : see declaration of 'list' C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2440: 'initializing' : cannot convert from 'class std::list >::iterator' to 'class std::list<_Ty,_A>::const_iter ator' No constructor could take the source type, or constructor overload resolution was ambiguous C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(36) : error C2262: 'citer' : cannot be destroyed C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(37) : error C2679: binary '!=' : no operator defined which takes a right-hand operand of type 'class std::list >::iterator' ( or there is no acceptable conversion) C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(39) : error C2228: left of '.m_iData' must have class/struct/union type Error executing cl.exe. Sort.exe - 7 error(s), 0 warning(s)
#include <list>
#include <string>
#include <iostream>
#include <algorithm>using namespace std;
class MyData
{
public:
int m_iData;
string m_strSomeOtherData;
};bool MyDataSortPredicate(const MyData& lhs, const MyData& rhs)
{
return lhs.m_iData < rhs.m_iData;
}int main()
{
// Create list
list<MyData> mylist;// Add data to the list
MyData data;
data.m_iData = 3;
mylist.push_back(data);
data.m_iData = 1;
mylist.push_back(data);// Sort the list using predic
Harold_Wishes wrote:
// Dump the list to check the result for (list::const_iterator citer = mylist.begin(); citer != mylist.end(); ++citer) { cout << (*citer).m_iData << endl; }
Don't write your own loop for this.
// declared somewhere void printData(const MyData& data) { cout << data.m_iData << endl; } // use instead of loop for_each(myList.begin(), myList.end(), printData);
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week Zac
-
Harold_Wishes wrote:
// Dump the list to check the result for (list::const_iterator citer = mylist.begin(); citer != mylist.end(); ++citer) { cout << (*citer).m_iData << endl; }
Don't write your own loop for this.
// declared somewhere void printData(const MyData& data) { cout << data.m_iData << endl; } // use instead of loop for_each(myList.begin(), myList.end(), printData);
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week Zac
This worked. But I still have commented out the code that is suppose to do the sort---> mylist.sort(MyDataSortPredicate);
C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(38) : error C2664: 'void __thiscall std::list<class MyData,class std::allocator<class MyData> >::sort(struct std::greater<class MyData>)' : cannot convert parameter 1 from '
bool (const class MyData &,const class MyData &)' to 'struct std::greater<class MyData>'
No constructor could take the source type, or constructor overload resolution was ambiguous
Error executing cl.exe.-- modified at 15:03 Monday 10th July, 2006
-
I decided to pick this apart and comment out the for loop because it is still not obvious to me where the problem is. The for loop seems to declare a pointer and initialize it to point to the beginning of the list and simply prints each item on screen until the pointer reaches the end. That aside I notice there appears to be some conversion type error in the line above with mylist.sort(MyDataSortPredicate); See error message below. :sigh: c:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(33) : error C2664: 'void __thiscall std::list >::sort(struct std::greater)' : cannot convert parameter 1 from ' bool (const class MyData &,const class MyData &)' to 'struct std::greater' No constructor could take the source type, or constructor overload resolution was ambiguous Error executing cl.exe. Sort.exe - 1 error(s), 0 warning(s)
mylist.sort(MyDataSortPredicate);
// Dump the list to check the result
/* for (list::const_iterator citer = mylist.begin();
citer != mylist.end(); ++citer)
{
cout << (*citer).m_iData << endl;
}*/See here for the STL fix.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
-
This worked. But I still have commented out the code that is suppose to do the sort---> mylist.sort(MyDataSortPredicate);
C:\Documents and Settings\WoodallH\Desktop\C++\Project 6 Nesty tag\Sort.cpp(38) : error C2664: 'void __thiscall std::list<class MyData,class std::allocator<class MyData> >::sort(struct std::greater<class MyData>)' : cannot convert parameter 1 from '
bool (const class MyData &,const class MyData &)' to 'struct std::greater<class MyData>'
No constructor could take the source type, or constructor overload resolution was ambiguous
Error executing cl.exe.-- modified at 15:03 Monday 10th July, 2006
You can either use the general sort algorithm (
std::sort
) or write a specializedless<MyData>()
functor that looks something like:struct std::less { bool operator()(const MyData& lhs, const MyData& rhs) { return lhs.m_iData < rhs.m_iData; } };
And then call
mylist.sort(std::less<MyData>)
. If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week Zac -
Hello I have designed a program that takes in a list of structs of type data (shown below). The program works fine. But I need a way of sorting the list by decreasing length of string Sequence. In other words, I need to determine the length of each Sequence and position each data so that the longest strings appear first. So I am not comparing strings themselves, but lengths of strings. I know there is a sort function that is part of the <list> class, but I am not sure if I can use it in this situation. Thanks in advance for anyone who can come to a solution. HRW.
#include <string>
#include <list>
#include <iostream>
#include <fstream>using namespace std;
struct data //
{
string Length; //
string Sequence; //
string N_Terminal; //
string C_Terminal;
};list<data> g_DataList;
list<data>::iterator dataListIter;-- modified at 11:29 Monday 10th July, 2006
-
Harold, You'll do much better if you get (1) a copy of Stroustrup and (2) a copy of Josuttis. Read them in that order. Because what you want to do is trivial and will be explained by the first book; putting in the time for the second will be worth it. earl
Are these C++ authors of C++ books? I will look for them. I did not see anything in the Deitel & Deitel book that was too helpful.
-
Are these C++ authors of C++ books? I will look for them. I did not see anything in the Deitel & Deitel book that was too helpful.
-
Hello I have designed a program that takes in a list of structs of type data (shown below). The program works fine. But I need a way of sorting the list by decreasing length of string Sequence. In other words, I need to determine the length of each Sequence and position each data so that the longest strings appear first. So I am not comparing strings themselves, but lengths of strings. I know there is a sort function that is part of the <list> class, but I am not sure if I can use it in this situation. Thanks in advance for anyone who can come to a solution. HRW.
#include <string>
#include <list>
#include <iostream>
#include <fstream>using namespace std;
struct data //
{
string Length; //
string Sequence; //
string N_Terminal; //
string C_Terminal;
};list<data> g_DataList;
list<data>::iterator dataListIter;-- modified at 11:29 Monday 10th July, 2006
Simply define an ordering by implementing
operator <
. i.e.struct data { string Length; string Sequence; string N_Terminal; string C_Terminal; friend bool operator<(const data &L, const data &R) { // In this example I'm only sorting by 'Sequence' return L.Sequence<R.Sequence; } }; // Now you can sort like this. g_DataList.sort();
Steve -
Simply define an ordering by implementing
operator <
. i.e.struct data { string Length; string Sequence; string N_Terminal; string C_Terminal; friend bool operator<(const data &L, const data &R) { // In this example I'm only sorting by 'Sequence' return L.Sequence<R.Sequence; } }; // Now you can sort like this. g_DataList.sort();
SteveSo after creating the list, doesn't the sort function take in one parameter of type data? And will the list be printed in sorted order after the sort function is invoked?
-
So after creating the list, doesn't the sort function take in one parameter of type data? And will the list be printed in sorted order after the sort function is invoked?
The
list
already knows the type of the data it contains. There are two member functions oflist
calledsort
: one with no parameters and one which takes a predicate. I'm using the one which takes no parameters and overloadingoperator <
. Give it a try and see if it works for you. Steve