When I sort a list with object's pointer, it will be error
When I sort a list with pointer object it will be error.
#include <iostream>
#include <string>
#include <list>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
/* class Person
*/
class Person {
private:
string fn;// first name
string ln;// last name
public:
Person() {
}
Person(const string& f, const string& n)
: fn(f), ln(n) {
}
string firstname() const;
string lastname() const;
// ...
};
inline string Person::firstname() const {
return fn;
}
inline string Person::lastname() const {
return ln;
}
/* binary function predicate:
* - returns whether a person is less than another person
*/
bool personSortCriterionFunction (const Person* p1, const Person* p2)
{
return p1->lastname()>p2->lastname() ||
(!(p2->lastname()>p1->lastname()) &&
p1->firstname()>p2->firstname());
}
int main()
{
// create some persons
Person p1("nicolai","josuttis");
Person p2("ulli","josuttis");
Person p3("anica","josuttis");
Person p4("lucas","josuttis");
Person p5("lucas","otto");
Person p6("lucas","arm");
Person p7("anica","holle");
// insert person into collection coll
list<Person*> coll;
coll.push_back(&p1);
coll.push_back(&p2);
coll.push_back(&p3);
coll.push_back(&p4);
coll.push_back(&p5);
coll.push_back(&p6);
coll.push_back(&p7);
// Sort list
coll.sort(personSortCriterionFunction);
return 0;
}
# CC listpointer.cxx
"listpointer.cxx", line 69: Error: Could not find a match for std::list<Person*>::sort(bool(const Person*,const Person*)) needed in main().
1 Error(s) detected.
It is correct when I change to list<Person> coll and other corresponding lines.
CC listpointer.cxx
Who know why the reason?

