c++sort函数结构体数组
时间: 2023-08-30 18:05:23 浏览: 137
可以使用C++的STL库中的sort函数对结构体数组进行排序。
假设有一个结构体Student,包含成绩和姓名两个属性:
```
struct Student {
string name;
int score;
};
```
现在要对一个包含多个Student对象的数组进行按照成绩从高到低的排序,可以使用以下代码:
```
bool cmp(Student a, Student b) {
return a.score > b.score;
}
int main() {
Student students[3] = {
{"Tom", 85},
{"Jerry", 90},
{"John", 78}
};
sort(students, students + 3, cmp);
for (int i = 0; i < 3; i++) {
cout << students[i].name << " " << students[i].score << endl;
}
return 0;
}
```
其中,cmp函数用于定义比较规则,sort函数的第二个参数为排序区间的左端点,第三个参数为排序区间的右端点,最后对排序后的数组进行遍历输出即可。
需要注意的是,cmp函数必须返回bool类型,表示a是否应该排在b的前面。在本例中,按照成绩从高到低排序,因此如果a的成绩大于b的成绩,则返回true,否则返回false。
相关问题
c++对vector结构体数组进行排序
可以使用`std::sort()`函数对`vector`结构体数组进行排序。以下是一个示例代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
struct MyStruct {
int value;
// 其他成员变量...
};
bool compare(const MyStruct& a, const MyStruct& b) {
return a.value < b.value;
}
int main() {
std::vector<MyStruct> myVector;
// 将需要排序的结构体对象添加到vector中
std::sort(myVector.begin(), myVector.end(), compare);
for (const auto& item : myVector) {
// 输出排序后的结果
std::cout << item.value << " ";
}
return 0;
}
```
使用c++ 实现有结构体数组的递归去重排序
在 C++ 中,你可以通过递归和数据结构如`std::vector`、`std::set`或者自定义`std::unordered_set`来实现结构体数组的去重并排序。这里我们假设有一个结构体`Struct`,它有两个成员,例如`name`和`value`。以下是基本步骤:
1. 首先,你需要创建一个辅助函数,用于递归处理结构体数组,并将去重后的元素添加到集合中。
```cpp
struct Struct {
std::string name;
int value;
};
void removeDuplicates(std::vector<Struct>& arr, std::set<std::pair<std::string, int>>& uniqueSet) {
if (arr.empty())
return;
// 检查当前元素是否已经存在于集合中
auto it = uniqueSet.find({arr[0].name, arr[0].value});
if (it == uniqueSet.end()) {
// 如果不存在,添加到集合中并将原数组的下一个元素传递给递归函数
uniqueSet.insert({arr[0].name, arr[0].value});
removeDuplicates(arr.begin() + 1, uniqueSet);
} else {
// 如果存在,跳过已有的元素
arr.erase(arr.begin());
}
}
```
2. 然后,你可以对原始数组进行排序,这可以使用 C++ 的 `sort` 函数,配合一个比较函数来按值排序。
```cpp
bool compareStructs(const Struct& a, const Struct& b) {
return a.value < b.value; // 按照 value 字段排序
}
// 排序并移除重复项
void sortAndRemoveDuplicates(std::vector<Struct>& arr) {
std::set<std::pair<std::string, int>> uniqueSet;
removeDuplicates(arr, uniqueSet);
// 将集合转换回有序的向量
arr.clear();
for (const auto& pair : uniqueSet) {
arr.push_back(Struct{pair.first, pair.second});
}
std::sort(arr.begin(), arr.end(), compareStructs);
}
```
阅读全文