c++用STL的容器map和算法find_if实现名表表示和查找功能。
时间: 2023-11-27 14:49:38 浏览: 77
以学生为例,可以用map来存储学生的姓名和对应的学号:
```c++
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
map<string, int> stu_map;
// 添加学生信息
stu_map["张三"] = 1001;
stu_map["李四"] = 1002;
stu_map["王五"] = 1003;
stu_map["赵六"] = 1004;
// 查找学生信息
string name;
cout << "请输入要查找的学生姓名:";
cin >> name;
auto it = stu_map.find(name);
if (it != stu_map.end()) {
cout << "学号为" << it->second << endl;
} else {
cout << "未找到该学生信息" << endl;
}
return 0;
}
```
上述代码中,map的key为string类型,value为int类型,可以根据学生姓名快速查找其对应的学号。
另外,也可以使用STL算法中的find_if来实现查找功能,需要先定义一个查找条件的函数对象:
```c++
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
struct Student {
string name;
int id;
};
bool find_student(const Student& s, const string& name) {
return s.name == name;
}
int main() {
vector<Student> stu_vec = { {"张三", 1001}, {"李四", 1002}, {"王五", 1003}, {"赵六", 1004} };
// 查找学生信息
string name;
cout << "请输入要查找的学生姓名:";
cin >> name;
auto it = find_if(stu_vec.begin(), stu_vec.end(), bind(find_student, placeholders::_1, name));
if (it != stu_vec.end()) {
cout << "学号为" << it->id << endl;
} else {
cout << "未找到该学生信息" << endl;
}
return 0;
}
```
上述代码中,先定义了一个表示学生的结构体Student,然后使用vector来存储学生信息。使用find_if算法时,需要给出一个查找条件的函数对象,这里使用bind函数将查找条件函数和查找的姓名绑定在一起,placeholders::_1表示函数的第一个参数,即要查找的学生对象。如果找到了符合条件的学生,则输出其对应的学号。
阅读全文