通过重载<对自定义对象的向量进行排序
Sorting a Vector of Custom Objects by overloading <
我正在尝试对节点向量进行排序。我遵循了这个线程的建议,重载了我的
结构体的<操作符>操作符>。然而,我没有得到排序后的列表排序被调用。
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
由于您正在对指针向量进行排序,但操作符适用于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;
});
最简单的方法是使用lambda:
sort(test.begin(),test.end(), [](const node &lhs, const node &rhs){return lhs->frequency < rhs->frequency;});
相关文章:
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 从多个源构造一个对象,包括一个对象向量
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 对象 C++ 向量的 STL 容器
- 初始化C++中的对象向量
- 从自定义类获取对象向量中的 max 元素
- 如何在 c++ 中打印存档中的对象向量
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 尝试重载输出运算符时,我无法遍历对象向量
- 如何在C++中打印对象向量的内容
- 打印出对象向量中的每个元素C++
- 在 c++ 的构造函数中分配对象向量时出错
- 遍历对象向量,并找到与从文本文件中提取的对象匹配的变量
- 对象向量是否在堆或堆栈上分配C++?
- 基于不同字段的对象向量的排序功能
- 有没有一种简单的方法可以在对象向量上调用构造函数?
- 用rapidjson读取子对象向量
- 尝试使用比较运算符对对象向量进行排序
- 如何用对象向量重载 cin(>>)
- 如何将某个元素从shared_ptr擦除到对象向量?