如何对包含自定义(即用户定义)对象的向量进行排序。
可能应该使用标准 STL 算法 排序 以及将在自定义对象中的一个字段(作为排序键)上操作的谓词(函数或函数对象)。
我在正确的轨道上吗?
原文由 TL36 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 C++20 中,可以默认 operator<=> 没有用户定义的比较器。编译器会处理这个问题。
#include <iostream>
#include <compare>
#include <vector>
#include <algorithm>
struct MyInt
{
int value;
MyInt(int val) : value(val) {}
auto operator<=>(const MyInt& other) const = default;
};
int main()
{
MyInt Five(5);
MyInt Two(2);
MyInt Six(6);
std::vector V{Five, Two, Six};
std::sort(V.begin(), V.end());
for (const auto& element : V)
std::cout << element.value << std::endl;
}
输出:
2
5
6
原文由 Tony Tannous 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
使用
std::sort
编辑: 正如 Kirill V. Lyadvinsky 指出的那样,您可以为
operator<
MyStruct
不是提供排序谓词:使用这种方法意味着您可以简单地对向量进行如下排序:
Edit2: 正如 Kappa 建议的那样,您还可以通过重载
>
运算符并稍微更改排序调用来按降序对向量进行排序:你应该调用 sort 为: