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
#include
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
#include 
#include
using namespace std;
int main()
{
    map> 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<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中的元素,编译器会报错

你可能感兴趣的:(c++)