sort函数对结构体排序
时间: 2025-02-23 11:24:28 浏览: 67
### 如何使用 `sort` 函数对结构体进行排序
#### C++
在C++中,可以重载 `<` 或者提供自定义的比较器来实现对结构体的排序。
```cpp
#include <vector>
#include <algorithm>
struct Person {
std::string name;
int age;
bool operator<(const Person& other) const { // 重载小于运算符
return this->age < other.age; // 按年龄升序排列
}
};
int main() {
std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}};
std::sort(people.begin(), people.end()); // 使用默认的小于运算符
for (auto &p : people) {
std::cout << p.name << " is " << p.age << "\n";
}
return 0;
}
```
如果不想改变类本身,则可以通过传递第三个参数作为比较函数[^1]:
```cpp
std::sort(people.begin(), people.end(),
[](const Person &a, const Person &b){
return a.age < b.age;
});
```
#### C#
对于C#来说,在定义类时实现接口 `IComparable<T>` 可以让对象支持自然顺序;也可以创建外部比较器实例传给 `List.Sort()` 方法。
```csharp
public class Employee : IComparable<Employee>
{
public string Name { get; set; }
public double Salary { get; set; }
public int CompareTo(Employee other)
{
if (this.Salary > other.Salary) return 1;
else if (this.Salary < other.Salary) return -1;
else return 0;
}
}
// 调用方式如下:
var employees = new List<Employee>();
employees.Add(new Employee{Name="John Doe",Salary=70_000});
employees.Sort(); // 自动按照工资高低排序
foreach(var emp in employees){
Console.WriteLine($"{emp.Name} earns ${emp.Salary}");
}
```
当然还可以利用 LINQ 表达式来进行更灵活的操作:
```csharp
using System.Linq;
...
var sortedEmployees = from e in employees orderby e.Salary select e;
or var sortedEmps = employees.OrderBy(e => e.Salary);
```
#### Python
Python 中可以直接通过指定 key 参数来自定义排序逻辑:
```python
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
students = [
Student('Tom', 98),
Student('Jerry', 87)
]
sorted_students = sorted(students, key=lambda student: student.score)
for s in sorted_students:
print(f'{s.name}: {s.score}')
```
另外一种方法是在类内部定义 `__lt__()`,使得该类型的对象能够被直接用来做大小关系判断.
```python
def __lt__(self, other):
return self.score < other.score
```
之后就可以像处理基本类型一样调用内置函数 `sorted()` 来完成排序工作了.
#### Java
Java 支持两种主要的方式来做这个事情:一是使实体类实现了 Comparable 接口并覆写 compareTo 方法;二是编写 Comparator 实现类或匿名内部类,并将其作为参数传递给 Collections.sort() 等工具方法。
以下是基于第一个方案的例子:
```java
import java.util.*;
class Book implements Comparable<Book>{
private String title;
private Double price;
@Override
public int compareTo(Book o) {
return Double.compare(this.price,o.getPrice());
}
// getter setter ...
}
ArrayList<Book> books=new ArrayList<>();
Collections.sort(books); // 默认按价格从小到大排序
```
而第二种情况则更加通用,允许我们根据不同的需求动态调整排序策略:
```java
Comparator<Book> byTitle=(o1,o2)->o1.getTitle().compareTo(o2.getTitle());
Collections.sort(books,byTitle);
```
阅读全文
相关推荐


















