std::list::sort() doesn't work with custom class
807575Aug 19 2009 — edited Aug 19 2009The following example doesn't order a list the way I'd expect. Is this being done wrong? Sun Studio 12 (not update 1). Current patches as of Monday.
#include <list>
class CMyClass
{
public:
CMyClass(long a) : m_Sec(a) { }
bool operator<(const CMyClass* rhs)
{
return (m_Sec < rhs->m_Sec);
}
long m_Sec;
};
typedef std::list<CMyClass*> TLogList;
int
main(int argc, char* argv[])
{
TLogList logList;
CMyClass* name = new CMyClass(0x4A833E79);
logList.push_back(name);
name = new CMyClass(0x4A85E144);
logList.push_back(name);
name = new CMyClass(0x4A85E66F);
logList.push_back(name);
name = new CMyClass(0x4A85E66F);
logList.push_back(name);
name = new CMyClass(0x4A85B2C2);
logList.push_back(name);
name = new CMyClass(0x4A85D6EF);
logList.push_back(name);
name = new CMyClass(0x4A69F9AD);
logList.push_back(name);
name = new CMyClass(0x4A85DC92);
logList.push_back(name);
name = new CMyClass(0x4A817316);
logList.push_back(name);
name = new CMyClass(0x4A85DEEB);
logList.push_back(name);
name = new CMyClass(0x4A846329);
logList.push_back(name);
name = new CMyClass(0x4A85E39D);
logList.push_back(name);
name = new CMyClass(0x4A85D41D);
logList.push_back(name);
name = new CMyClass(0x4A89CC17);
logList.push_back(name);
name = new CMyClass(0x4A85DC19);
logList.push_back(name);
logList.sort();
TLogList::iterator logListIter = logList.begin();
TLogList::iterator logListEnd = logList.end();
for (; logListIter != logListEnd; ++logListIter)
{
CMyClass* name = *logListIter;
cout << hex << name->m_Sec << endl;
}
return 0;
}
which produces
4a833e79
4a85e144
4a85e66f
4a85e66f
4a85b2c2
4a85d6ef
4a69f9ad
4a85dc92
4a817316
4a85deeb
4a846329
4a85e39d
4a85d41d
4a89cc17
4a85dc19