我正在开发一个程序,该程序创建一个包含 4 个客户端的向量,然后使用比较器类对它们进行堆排序(本质上是按它们的帐户余额排序)。之后,我只是打印出向量中每个客户的有序帐号。但是,我认为我没有正确实施它。首先,当我在向量上调用 STL 堆排序时,我知道我将比较器作为第三个参数传递。我的印象是我需要用我的 AccountOrder 比较器类的对象来调用它,但这给了我很多错误。如果我在 Class 而不是该类的实例上调用它,它不会给我带来几乎一样多的错误。这样做的正确方法是什么?
int main()
{
AccountOrder f;
vector<Client> list;
Client client1(345.88, "Charlie");
Client client2(249.12, "Rashesh");
Client client3(442.90, "Michael");
Client client4(543.74, "Mary");
list.push_back(client1);
list.push_back(client2);
list.push_back(client3);
list.push_back(client4);
make_heap(list.begin(), list.end(), f);
sort_heap(list.begin(), list.end(), f);
for(int i = 0; i < list.size(); i++)
cout << list[i].getAccountBalance();
system("pause");
return 0;
}
比较器类:
class AccountOrder
{
public:
bool operator()(Client * a, Client * b)
{
return a->getAccountBalance() > b->getAccountBalance();
};
};
比较器已在 main() 函数上方的代码中实现。其次,我实际上需要将比较器传递给哪个函数?(这里我已经将它传递给两者,我还不确定)。