I have experienced some difficulty with sorting lists of type:
list < shared_ptr < foo > >
Here is the expected (sorted) program output:
424238335
596516649
719885386
846930886
1189641421
1649760492
1681692777
1714636915
1804289383
1957747793
Instead, I end up with:
1804289383
846930886
1681692777
1714636915
1957747793
424238335
719885386
1649760492
596516649
1189641421
Below is the code in question:
////////////////////////////////////////////////
#include <iostream>
#include <list>
using namespace std;
#include
using namespace boost;
////////////////////////////////////////////////
class my_class
{
public:
int m_val;
public:
my_class();
bool operator<(const my_class&);
void Display();
};
////////////////////////////////////////////////
my_class::my_class()
{
m_val = rand();
}
bool my_class::operator<(const my_class& arg)
{
return m_val < arg.m_val;
}
void my_class::Display()
{
cout << m_val << "\n";
}
////////////////////////////////////////////////
int main( int argc, char **argv )
{
// list < my_class > my_list;
// list < my_class >::iterator my_iter;
list < shared_ptr < my_class > > my_list;
list < shared_ptr < my_class > >::iterator my_iter;
//populate my_list
for (int x=0; x<10; x++)
{
// my_class tmp_obj;
shared_ptr < my_class > tmp_obj;
tmp_obj.reset(new my_class);
my_list.push_back(tmp_obj);
}
//sort the list
my_list.sort();
//display contents of my_list
my_iter = my_list.begin();
while (my_iter != my_list.end())
{
// (*my_iter).Display();
(*my_iter)->Display();
++my_iter;
}
return 0;
}
////////////////////////////////////////////////
Thanks in advance for any help you may render...