student
subclassでクラスを作成しましたcomparator
。のコンストラクターは、生徒を比較する方法を指定するcomparator
という 1 つの引数を取ります。cmp_mode
class student
{
public:
std::string name;
int course, group;
student(std::string name,
int course,
int group): name(name)
{
this->course = course;
this->group = group;
}
enum cmp_mode
{
NAME,
COURSE,
GROUP
};
class comparator
{
cmp_mode mode;
public:
comparator(cmp_mode mode)
{
this->mode = mode;
}
bool compare(student s1, student s2)
{
if (mode == NAME)
return s1.name < s2.name;
else if (mode == COURSE)
return s1.course < s2.course;
else if (mode == GROUP)
return s1.group < s2.group;
else
throw "Oh god! We can't compare variables using these keys!";
}
};
};
また、list
ofを作成したstudents
ので、コンパレータ サブクラスを使用してこのリストを並べ替えたいと思います。
std::list<student> l;
student st1("Anya", 2, 5);
student st2("Misha", 4, 2);
student st3("Yasha", 1, 3);
l.push_back(st1);
l.push_back(st2);
l.push_back(st3);
student::comparator by_group(student::GROUP);
l.sort(by_group.compare);
しかし、次のエラーが発生します。
ERROR: Reference to non-static member function must be called.
それで、私は何をすべきですか?より良い方法で並べ替えを調整するにはどうすればよいですか?