按班级和姓名折半查找学生信息,c++
时间: 2024-03-26 21:40:23 浏览: 59
c++学生信息查询.docx
可以使用二分查找算法来实现按班级和姓名折半查找学生信息。以下是一份简单的C++代码示例:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Student {
string name;
int grade;
};
bool cmp(Student a, Student b) {
if (a.grade == b.grade) {
return a.name < b.name;
}
return a.grade < b.grade;
}
int binarySearch(vector<Student>& students, int l, int r, int grade, string name) {
while (l <= r) {
int mid = l + (r - l) / 2;
if (students[mid].grade == grade && students[mid].name == name) {
return mid;
} else if (cmp(students[mid], {name, grade})) {
l = mid + 1;
} else {
r = mid - 1;
}
}
return -1;
}
int main() {
vector<Student> students = {
{"Tom", 2},
{"Jerry", 3},
{"Bob", 3},
{"Alice", 4},
{"Lucy", 4},
{"John", 5},
{"Peter", 5},
{"Mike", 5},
{"Jack", 6},
{"Rose", 6},
};
sort(students.begin(), students.end(), cmp); // 按班级和姓名排序
int grade, index;
string name;
cout << "请输入要查找的班级和姓名(如:3 Bob):";
cin >> grade >> name;
index = binarySearch(students, 0, students.size() - 1, grade, name);
if (index != -1) {
cout << "找到了,该学生在第" << index + 1 << "个位置。" << endl;
} else {
cout << "未找到该学生。" << endl;
}
return 0;
}
```
首先定义一个结构体 `Student`,包含学生姓名和班级信息,然后定义一个比较函数 `cmp`,用于按班级和姓名排序。接着实现二分查找函数 `binarySearch`,在其中使用 `cmp` 函数来比较两个学生的大小关系。最后在 `main` 函数中输入要查找的班级和姓名,并调用 `binarySearch` 函数进行查找。如果找到了对应的学生,输出其在 `students` 中的位置,否则输出未找到该学生的提示信息。
阅读全文