本文主要是介绍student inquiring,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
描述
学生表包括三个字段:编号、姓名和年龄。如下:
2016001, "Zhang", 19
2016002, "Li", 20
2016003, "wang", 21
2016004, "Liu", 22
2016005, "Zhao", 22
2016006, "Zhang", 22
样例输入
2016001
2016003
样例输出
2016001 Zhang 19
2016003 wang 21
Code 1(c)
#include<stdio.h>
#include<string.h>
struct Student{int number;char name[50];int age;
};
int main(){struct Student students[] ={{2016001, "Zhang", 19},{2016002, "Li", 20},{2016003, "wang", 21},{2016004, "Liu", 22},{2016005, "Zhao", 22},{2016006, "Zhang", 22}};int inputNumber;while(scanf("%d", &inputNumber) != EOF) {for(int i = 0; i < sizeof(students) / sizeof(students[0]); i++) {if(students[i].number == inputNumber) {printf("%d %s %d\n", students[i].number, students[i].name, students[i].age);}}}return 0;
}
Code 2(c++)(version1、version2二选一)
#include<iostream>
#include <string>
#include<map>
using namespace std;
int main()
{map<int,pair<string,int>> StudentTable={{2016001, {"Zhang", 19}},{2016002, {"Li", 20}},{2016003, {"wang", 21}},{2016004, {"Liu", 22}},{2016005, {"Zhao", 22}},{2016006, {"Zhang", 22}}};int num;while(cin>>num){//version 1:for(const auto&p:StudentTable){if(num==p.first){cout<<num<< " "<<p.second.first<<" "<<p.second.second<<endl;}}//version 2;auto it = studentTable.find(number);if(it != studentTable.end()) {cout << number << " "<< it->second.first << " "<< it->second.second << endl;} }return 0;
}
对it->second.second it != studentTable.end( )的解释
当你使用 find 方法在 map 中查找特定的键时,
若找到了指定的键,find 方法将返回一个指向该元素的迭代器;
若没有找到指定的键,find 方法将返回一个指向容器末尾的迭代器,即 end。
因此,it != studentTable.end() 这个条件语句的意思是:如果迭代器 it 指向的元素不是容器的末尾(即找到了指定的键),则执行接下来的语句块。
在示例代码中,这个条件语句用于检查是否找到了用户输入的学号对应的学生信息,如果找到了,则输出该学生的信息;如果没有找到,则不执行输出语句。
在C++中,map的find函数返回的是一个迭代器(iterator),而不是一个pair。因此,如果要通过迭代器获取pair中的元素,需要使用箭头运算符(->)。it->second表示迭代器指向的pair中的第二个元素,即{string, int},再使用"."运算符获取其中的string元素。所以正确的写法是it->second.first。
若使用"."运算符来访问迭代器指向的pair中的元素,编译器会报错
这篇关于student inquiring的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!