【发布时间】:2020-04-07 04:39:31
【问题描述】:
class Student
{
public:
string a;
int age;
Student(string a,int age)
{
this->a=a;
this->age=age;
}
};
bool operator<(const Student &a,const Student &b)
{
return a.age<b.age;
}
int main()
{
priority_queue<Student> pq;
Student a("max",1);
Student b("john",1);
pq.push(a);
pq.push(b);
cout << pq.top().a << " " << pq.top().age << endl;
pq.pop();
cout << pq.top().a << " " << pq.top().age << endl;
pq.pop();
}
输出是-
最多 1 个
约翰 1
关于更改比较器功能
bool operator<(const Student &a,const Student &b)
{
return a.age<=b.age;
}
输出是-> 约翰 1
最多 1 个
谁能解释一下比较器函数在
【问题讨论】:
-
一种 Compare 类型,提供 strict 弱排序。
<=不符合此要求。因此,您会得到未定义的行为,并且您的问题是非法的。 -
@jamesgem this 解释得好一点吗?
-
什么是严格的弱排序?
-
@jamesgem -- 然后使用大于只比较,即
>。并且永远不要使用<=或>=来确定一个项目是否在另一个之前。如果您阅读给出的答案,您就会明白为什么它不起作用,因为它对于两个相等的项目是模棱两可的。 Strict-weak-order 只想知道哪个项目放在另一个之前,如果你对那个问题给出了相互矛盾的答案,那么程序就会变得混乱并且你会得到奇怪的错误。 -
这里是some documentation,了解比较函数是如何工作的。让很多人感到困惑的是,您需要返回
false以获得相同的对象。
标签: c++ stl comparator priority-queue