一种排序(结构体数组)
时间: 2024-12-28 19:25:16 浏览: 1
### C/C++ 中结构体数组排序方法
#### 使用 `std::sort` 对 C++ 结构体数组进行排序
对于给定的结构体:
```cpp
struct test {
int a;
int b;
int c;
};
```
可以利用标准库函数 `std::sort()` 来实现高效的排序操作。为了使 `std::sort()` 能够处理自定义类型的对象,比如这里的结构体实例,需要提供比较准则。
一种常见的方式是通过编写一个独立的布尔型二元谓词(即返回 bool 的函数),该函数接受两个参数并决定它们之间的顺序关系[^1]。
下面是一个完整的例子展示如何基于成员变量 `a` 排序结构体数组:
```cpp
#include <algorithm>
#include <iostream>
// 定义结构体
struct test {
int a;
int b;
int c;
// 构造函数用于方便初始化
test(int _a, int _b, int _c): a(_a), b(_b), c(_c) {}
};
// 自定义比较器:按 'a' 成员升序排列
bool compare_by_a(const test& lhs, const test& rhs) {
return lhs.a < rhs.a;
}
int main() {
// 创建测试数据集
test tests[] = {test(3, 2, 1), test(1, 5, 9), test(4, 7, 8)};
size_t n = sizeof(tests)/sizeof(*tests);
// 执行排序
std::sort(std::begin(tests), std::end(tests), compare_by_a);
// 输出结果验证排序效果
for (size_t i=0; i<n ; ++i){
printf("Sorted element %zu: (%d,%d,%d)\n",
i+1, tests[i].a, tests[i].b, tests[i].c);
}
return 0;
}
```
这段代码展示了创建结构体、定义比较逻辑以及调用 `std::sort` 函数完成排序的过程。注意这里使用了 lambda 表达式的简化版本来代替显式声明的比较函数,在现代 C++ 编程实践中更为推荐这种方式。
此外,如果希望按照不同的字段排序或是降序排序,则只需调整上述比较器的具体实现即可满足需求。
阅读全文