【发布时间】:2017-07-23 20:47:39
【问题描述】:
我有一个 Business 对象列表,其中包含属性 id 和 rating,我想对它们进行排序,以便首先出现具有更高等级的对象,但是如果等级相同,则应保留原始顺序。
下面的代码是实现:
class Business {
public:
int id;
int rating;
Business(int idP, int ratingP) :id(idP), rating(ratingP) {}
};
bool compare(Business b1, Business b2) {
if (b1.rating != b2.rating) return b1.rating > b2.rating;
return true;
}
void sortBusinessObjects(vector<Business>& v) {
sort(v.begin(), v.end(), compare);
}
但是,当我测试它时,它抛出了异常(我正在使用 Visual Studio Express 并且看不到异常详细信息)
vector<Business> v{ {1, 3},{2, 5}, {9, 4}, {4, 3}, {5, 4} };
sortBusinessObjects(v);
我在这里猜测自定义比较器在导致问题的排序中返回的对象的结果相互矛盾?任何帮助表示赞赏。
【问题讨论】:
-
什么异常?
-
对不起,我使用的是 Visual Studio Express,它没有显示异常详细信息。但是,我认为逻辑非常简单,我认为我可能缺少一些关于 C++ 排序机制的东西
-
查看输出窗口。它告诉你
Expression: invalid comparator -
我看不出有任何理由在 sortBusinessObjects 中引用向量
( vector<Business> &)。 -
@AndreasH。这是问题吗?我的输出窗口只显示 *.exe 已触发断点
标签: c++ vector comparator