// 有关学生信息的头文件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;
}
- JAVA之旅(二十二)——Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习
JAVA之旅(二十二)--Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习 继续坚持下去吧,各位骚年们! 事实上,我们的数据结构,只剩下这个Map的知识点了,平时开发中 ...
- Map(双列集合)
出现的原因:现实生活中有些数据成对存在. 特点:键不可重复,值可以重复. ----------|Map 数据都是以键值对的形式存在,键唯一,值可重复. --------- ...
- []map[][]切片map小计
go中的map我们都知道在进行遍历的时候我们知道他是无序的.对于map[int]interface{}类型的,我们可以通过计算map的长度,通过定长的for循环,进行顺序的输出. 那么如果map的类型 ...
- map 小模板~~~ 写的不好 继续添加
#include<map>#include<string.h>#include<iostream>using namespace std; int main(){ ...
- ArrayList以及Map小练
ArrayList常用方法 public static void main(String[] args) { List list = new ArrayList(); List list1 = new ...
- str 小列题
name = " aleX leNb "#2.有变量 完成如下操作: 移除 name 变量对应的值两边的空格,并输出处理结果 name=name.strip() print(nam ...
- 集合框架-Map集合
* Map集合和Collection集合的区别? * Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的.可以把这个理解为:夫妻对 * Collection集合存储元素是单独出现的, ...
- Map、Debug追踪
Map集合 概述 现实生活中,我们常会看到这样一种集合:IP地址和主机名,身份证号和个人,系统用户名与系统用户对象等,这种一一对应的关系,我们把它称之为映射.Java当中提供了专门的集合类用来 ...
- HashMap为什么效率高?来看看这个小demo
一.前情回顾:在程序中有时候需要存放对象,容器应运而生.容器分为集合和Map.集合在这里不说,说说Map.Map在英语中是地图的意思,这个名字真是起的好,可以让人顾名思义.Map,就是存放键值对的结构 ...
随机推荐
- 冰多多团队-第二次scrum例会
冰多多团队-第二次Scrum会议 会议基本情况 会议时间:4月8日 19:00 - 19:30 会议地点:新主楼F座2楼沙发休息处 工作情况 团队成员 已完成任务 待完成任务 zpj Service实 ...
- FTO Obesity Variant Circuitry and Adipocyte Browning in Humans
好文献非常难得,提供了核心的研究思路. FTO Obesity Variant Circuitry and Adipocyte Browning in Humans - 这篇文章需要好好的解析 为深入 ...
- jQuery的zTree插件
写在前面 jQuery的 zTree插件 关键代码 <%@ page language="java" contentType="text/html; charset ...
- 微信小程序诡异错误this.setData报错
先说原因: function声明的函数和箭头函数的作用域不同,这是一个不小心坑的地方.可参考箭头函数说明:https://developer.mozilla.org/en-US/docs/Web/Ja ...
- FastStone Capture 9.3 强烈推荐,常用功能介绍
http://www.dayanzai.me/faststone-capture.html 经典优秀屏幕截图录像工具 FastStone Capture 9.3 绿色汉化中文版 下载 官网: ht ...
- Spark闭包与序列化
Spark的官方文档再三强调那些将要作用到RDD上的操作,不管它们是一个函数还是一段代码片段,它们都是“闭包”,Spark会把这个闭包分发到各个worker节点上去执行,这里涉及到了一个容易被忽视的问 ...
- PHP 指定时间/时间戳+某天/某月/某年
PHP指定时间戳加上1天,1周,1月,一年其实是不需要用上什么函数的!指定时间戳本身就是数字整型,我们只需要再计算1天,1周它的秒数相加即可! 博主搜索php指定时间戳加一天一年,结果许多的文章给出来 ...
- sql server数据库显示“单用户”的解决方法
USE master; GO DECLARE @SQL VARCHAR(MAX); SET @SQL='' SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID) --杀掉该进程 ...
- OpenShift 4.2 Service Mesh
1.和社区版Istio的区别 OpenShift 4.2的Service Mesh和upstream的Istio项目的增强,除了产品化之外,借用官方文档,区别在于: Red Hat OpenShift ...
- Web API之Web Components
本文参考<你的前端框架要被web组件替代了>. 于2011年面世的Web Components是一套功能组件,让开发者可以使用 HTML.CSS 和 JavaScript 创建可复用的组件 ...