// 有关学生信息的头文件student.h代码如下
#include
#include
using namespace std;
struct Student                                             // 表示学生信息的结构体
{
    string id;                                             // 学号
    string name;                                           // 姓名
    int grade;                                             // 年级
    int cls;                                               // 班级
    Student(){}
    Student( string id, string n, int g, int c )           // 构造函数
        : id( id ), name( n ), grade( g ), cls( c )
    { }
    friend istream & operator >> ( istream &, Student & );    // 友元输入函数
    friend ostream & operator << ( ostream &, const Student &);// 友元输出函数
};
istream &
operator >> ( istream &is, Student &stu )                  // 输入函数
{
    is >> stu.id;
    if( stu.id == "-1" )                   // 如果输入学号为-1,则表示结束输入
    {
      is.setstate( ios_base::failbit );                    // 设置输入流状态
      return is;                                           // 返回
   }
    is >> stu.name;                                        // 输入姓名
    is >> stu.grade;                                       // 输入年级
    is >> stu.cls;                                         // 输入班级
    return is;                                             // 返回输入流
}
ostream &
operator << ( ostream &os, const Student  &stu)             // 输出函数
{
    os << stu.id << ' ';                                   // 输出学号
    os << stu.name << ' ';                                 // 输出姓名
    os << stu.grade << ' ';                                // 输出年级
    os << stu.cls << ' ';                                  // 输出班级
    return os;                                             // 返回输出流
}
//////////////////////////////////////////////////////////////////////////
//主程序文件main.cpp代码如下
#include
#include
#include
#include                                 // 包含头文件map
#include "student.h"                          // 包含学生信息头文件student.h
using namespace std;                          // 使用名称空间std
typedef map STUDENT_BOOK;                 // 定义学生名册类型
typedef map::iterator STU_ITER;           // 定义学生名册迭代器类型
typedef map::const_iterator CONST_STU_ITER;
                                                           // 定义学生名册常量迭代器类型
void outputStudentBook( const STUDENT_BOOK & book )// 输出学生名册的函数
{
  CONST_STU_ITER iter = book.begin();                      // 定义迭代器,指向容器头
     while( iter != book.end() )                            // 遍历学生名册
     {
        cout<< iter->second << endl;                       // 输出学生信息
        iter++;
     }
}
int main(int argc, char *argv[])                           // 主函数
{
     // ——使用map容器管理学生名册——
     STUDENT_BOOK stuBook;                                  // 定义学生名册
     STU_ITER iter;                                         // 定义学生名册迭代器
     cout<<"——建立学生名册——"<<endl;
     cout<<"##输入-1退出##"<<endl;
     Student stu;                                           // 定义学生信息对象
  cin>>stu;                                                // 输入学生信息
     while ( cin )                                          // 输入流状态正确(学号!=-1)
     {
        stuBook[ stu.id ] = stu;                           // 插入学生信息
        cin>>stu;                                          // 继续输入学生信息
     }
     cin.clear();                                           // 恢复输入流状态
     cout<<endl<<"——学生名册——"<<endl;
     outputStudentBook( stuBook );                          // 输出学生名册
     cout<<endl<<"——查找学生——"<<endl;
     cout<<"##请输入学号,输入-1退出##"<<endl;
     string id;
     cin>>id;                                               // 输入要查找的学号
     while( "-1" != id )                                    // 学号 != -1
     {
        iter = stuBook.find( id );                         // 查找学生
        if( iter == stuBook.end() )                        // 如果未找到
        {
            cout<<"未找到学号为"<<id<<"的记录"<<endl;
        }
        else
        {
            cout<<"学生:"<< iter->second <<endl;          // 输出学生信息
        }
        cin>>id;                                           // 继续输入学号
     }
     cout<<endl<<"——删除学生记录——"<<endl;
     cout<<"##请输入学号,输入-1退出##"<<endl;
     cin>>id;                                               // 输入要删除的学号
     while( "-1" != id )                                    // 学号 != -1
     {
        iter = stuBook.find( id );                         // 查找学生
        if( iter == stuBook.end() )                        // 如果未找到
        {
            cout<<"未找到学号为"<<id<<"的记录"<<endl;
        }
 
 else
        {
            stuBook.erase( id );                           // 删除学生信息
        }
        cin>>id;
    }
    cout<<endl<<"——学生名册——"<<endl;
    outputStudentBook( stuBook );                          // 输出学生名册
    system("PAUSE");
    return EXIT_SUCCESS;
}
 

map小列的更多相关文章

  1. JAVA之旅(二十二)——Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习

    JAVA之旅(二十二)--Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习 继续坚持下去吧,各位骚年们! 事实上,我们的数据结构,只剩下这个Map的知识点了,平时开发中 ...

  2. Map(双列集合)

    出现的原因:现实生活中有些数据成对存在. 特点:键不可重复,值可以重复. ----------|Map                数据都是以键值对的形式存在,键唯一,值可重复. --------- ...

  3. []map[][]切片map小计

    go中的map我们都知道在进行遍历的时候我们知道他是无序的.对于map[int]interface{}类型的,我们可以通过计算map的长度,通过定长的for循环,进行顺序的输出. 那么如果map的类型 ...

  4. map 小模板~~~ 写的不好 继续添加

    #include<map>#include<string.h>#include<iostream>using namespace std; int main(){  ...

  5. ArrayList以及Map小练

    ArrayList常用方法 public static void main(String[] args) { List list = new ArrayList(); List list1 = new ...

  6. str 小列题

    name = " aleX leNb "#2.有变量 完成如下操作: 移除 name 变量对应的值两边的空格,并输出处理结果 name=name.strip() print(nam ...

  7. 集合框架-Map集合

    * Map集合和Collection集合的区别? * Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的.可以把这个理解为:夫妻对 * Collection集合存储元素是单独出现的, ...

  8. Map、Debug追踪

    Map集合   概述   现实生活中,我们常会看到这样一种集合:IP地址和主机名,身份证号和个人,系统用户名与系统用户对象等,这种一一对应的关系,我们把它称之为映射.Java当中提供了专门的集合类用来 ...

  9. HashMap为什么效率高?来看看这个小demo

    一.前情回顾:在程序中有时候需要存放对象,容器应运而生.容器分为集合和Map.集合在这里不说,说说Map.Map在英语中是地图的意思,这个名字真是起的好,可以让人顾名思义.Map,就是存放键值对的结构 ...

随机推荐

  1. 织梦Dedecms后台登陆密码忘记怎么办?

      有时候长期不登陆后台或则初次建站的新手常常忘记后台登陆密码,不过不用着急,早就有人写好了密码重设工具. 下载解压为radminpass.php, 通过FTP传到网站根目录,然后访问 http:// ...

  2. Vue系列——动态设置img标签的src属性

    声明 本文转自:vue动态设置img的src路径 正文 相信开发的小伙伴已经遇到这个问题了,动态切换img标签的src时,写的路径就是不生效,原因是vue并没有把你的路径字符串当做路径来处理,而是直接 ...

  3. 【C++】C++中的容器解析

    目录结构: contents structure [-] 顺序容器 顺序容器的种类 顺序容器的操作 容器操作可能使迭代器失效 Vector容器的增长机制 容器适配器 关联容器 关联容器的分类 关联容器 ...

  4. NodeJs FS 文件系统模块

    1. fs.stat 检测是文件还是目录 fs.stat('html',function(err,stats){ if(err){ console.log(err); return false; } ...

  5. Thinkphp5 实现动态模板主题多个模板切换

    在项目开发过程中会遇到一个网站有不同风格,本文详细介绍Thinkphp5 实现模板主题多个模板切换 一.在Config中配置view_path模板路径代码如下 1 2 3 4 5 6 7 8 9 10 ...

  6. Java13新特性 -- ZGC:取消使用未使用的内存

    在JDK 11中,Java引入了ZGC,这是一款可伸缩的低延迟垃圾收集器,但是当时只是实验性的.号称不管你开了多大的堆内存,它都能保证在 10 毫秒内释放 JVM ,不让它停顿在那.但是,当时的设计是 ...

  7. 工控随笔_25_西门子TIA 博图V14.SP1安装报错,授权错误

    前面有一篇文章说过西门子的软件安装的时候太麻烦,很容易出现错误. 但是有些错误在安装的时候却没有关系,例如下面的错误. 如上图所示,安装已经到最后一步,总结前面的修改系统组态已经打勾(✔) ,而且提示 ...

  8. Doker容器部署Tomcat服务器

    1.拉取tomcat服务镜像文件 root@ubuntu:~# docker pull registry.cn-hangzhou.aliyuncs.com/xxxx/xxxxx:web web: Pu ...

  9. iperf—流量测试

    iperf是另外一款用于流量测试的软件,主要运行于Windows系统和安卓系统的手机/PAD(IOS系统下载需要收费). 一个工作在Server模式,另外一个工作在Client模式,输入Server的 ...

  10. 【Docker学习之六】Docker容器互联

    环境 docker-ce-19.03.1-3.el7.x86_64 centos 7 一.基于Volume的互联就是-v参数,将本机文件或目录挂载到容器目录,实现文件目录共享 二.基于Link的互联 ...