我正在尝试对节点矢量进行排序。 我遵循this thread的建议并重载了我的 struct<操作 即可。但是,在调用sort之后,我没有得到排序列表。
struct node
{
int frequency ;
char data;
bool operator < (const node& n1) const
{
return (frequency < n1.frequency);
}
};
我通过以下方式调用sort:
vector<node*> test
//fill test with nodes
sort(test.begin(),test.end());
输出:
Presort data is: 1,1,2,3,3,1,2,1,1
Postsort data is: 3,2,1,1,1,1,2,1,3
答案 0 :(得分:6)
由于您正在对指针向量进行排序,但运算符适用于struct
,因此C ++会忽略您的运算符<
重载。
您可以提供一个自定义比较器来调用您的operator <
,就像这样
std::sort(test.begin(), test.end(), [](const node* pa, const node* pb) {
return (*pb) < (*pa);
});
或将比较直接编码到lambda中,并删除未使用的<
重载,如下所示:
std::sort(test.begin(), test.end(), [](const node* pa, const node* pb) {
return pb->frequency < pa->frequency;
});
答案 1 :(得分:0)
最简单的方法是使用lambdas:
sort(test.begin(),test.end(), [](const node &lhs, const node &rhs){return lhs->frequency < rhs->frequency;});