C++中struct里的cmp自定义排序怎么写
时间: 2025-06-29 22:08:53 浏览: 9
### C++ Struct 自定义 `cmp` 函数实现排序方法
在C++中,为了对结构体内对象进行自定义排序,通常会通过提供一个比较函数(即`cmp`函数),该函数用于决定两个对象之间的顺序关系。下面展示了一个具体的例子,其中定义了名为`node`的结构体,并实现了相应的`cmp`函数。
#### 定义结构体并设置成员变量
首先创建一个简单的结构体`node`,它包含了三个整型成员变量`a`, `b`, 和`c`:
```cpp
struct node {
int a;
int b;
int c;
};
```
#### 编写布尔类型的`cmp`函数
接下来编写一个返回布尔值的`cmp`函数,此函数接受两个`node`类型的参数作为输入,并基于特定条件判断第一个参数是否应该排在第二个之前。这里采用的是先按`a`升序排列;当`a`相等时,则依据`b`降序排列;再者如果`b`也相同的话就根据`c`做升序处理[^2]。
```cpp
bool cmp(const node& x, const node& y) {
if (x.a != y.a)
return x.a < y.a;
else if (x.b != y.b)
return x.b > y.b;
else
return x.c < y.c;
}
```
注意这里的`const`关键字是为了防止无意间修改传入的对象副本,而引用符号`&`则可以避免不必要的复制操作从而提高效率。
#### 使用标准库中的`sort()`算法调用`cmp`
一旦有了上述的`cmp`函数之后,在实际应用过程中就可以很方便地将其传递给STL提供的各种排序工具比如`std::sort()`来进行数组或向量里存储着多个`node`实例的整体排序工作了。只需将最后一个参数指定为我们刚才编写的那个二元谓词形式的比较器即可[^3]。
```cpp
#include <vector>
#include <algorithm>
int main() {
std::vector<node> nodes = {{1, 2, 3}, {4, 5, 6}, /* ... */};
// 对nodes进行排序
std::sort(nodes.begin(), nodes.end(), cmp);
return 0;
}
```
阅读全文
相关推荐


















