/*
第13章 map映照容器
13.1 map技术原理
13.2 map应用基础
13.3 本章小结
*/
// 第13章 map映照容器
// 13.1 map技术原理 ---------------------------------------------------------------------------------
// 13.2 map应用基础 ---------------------------------------------------------------------------------
//202 [] 插入
#include <map>
#include <iostream>
int main(void)
{
using namespace std;
//创建map容器对象m
map < const char *, float > m;
//插入元素(水果,单价)
m["apple"] = 3.6f;
m["orange"] = 3.2f;
m["banana"] = 1.8f;
m["pear"] = 2.3f;
m["lichee"] = 6.3f;
//打印元素
cout << "苹果价格: " << m["apple"] << "元/斤\n";
cout << "桔子价格: " << m["orange"] << "元/斤\n";
cout << "香蕉价格: " << m["banana"] << "元/斤\n";
cout << "雪梨价格: " << m["pear"] << "元/斤\n";
cout << "荔枝价格: " << m["lichee"] << "元/斤\n";
return 0;
}
//203
#include <map>
#include <iostream>
struct StudentInfo
{
//学生信息结构体
char *name;
int year;
char *addr;
};
struct StudentRecord
{
//学生记录结构体
int id; //学号,作键值
StudentInfo sf; //学生信息,作映照数据
};
int main(void)
{
using namespace std;
//学生数据
StudentRecord srArray[] = { //3笔学生记录
{ 1, "李强", 21, "北京" },
{ 2, "王文", 29, "上海" },
{ 3, "张三", 38, "深圳" }
};
//创建map容器对象m,管理学生记录
map < int, StudentInfo > m;
//装入3笔学生记录
for(int j = 0; j < 3; j++)
m[srArray[j].id] = srArray[j].sf;
//反向迭代器遍历元素
map < int, StudentInfo > ::reverse_iterator i, iend;
iend = m.rend();
cout << "学号 " << "姓名 " << "年龄 " << "地址 " << endl;
for(i = m.rbegin(); i != iend; i++)
cout << (*i).first << ' ' << (*i).second.name << ' ' << (*i).second.year <<
' ' << (*i).second.addr << ' ' << endl;
return 0;
}
/*
The pair::second element in the pair is set to true if a new element was inserted
or false if an element with the same value existed.
*/
//206
#include <map>
#include <iostream>
struct StudentRecord
{
//学生记录结构体
struct StudentInfo
{
char *name;
int year;
char *addr;
};
StudentRecord(int id_, char *name_, int year_, char *addr_)
{
id = id_;
sf.name = name_;
sf.year = year_;
sf.addr = addr_;
}
int id; //学号,作键值
StudentInfo sf; //其他信息
};
int main(void)
{
using namespace std;
//创建map容器对象m
typedef map < int, StudentRecord::StudentInfo > studentmap;
studentmap m;
pair < studentmap::iterator, bool > p;
//插入第一条学生记录
StudentRecord student1 = StudentRecord(1, "焦焦", 21, "北京");
pair < int, StudentRecord::StudentInfo >
pairStudent1(student1.id, student1.sf);
p = m.insert(pairStudent1);
if(!p.second)
cout << "插入学生记录失败:\n" << student1.id << ' ' << student1.sf.name <<
' ' << student1.sf.year << ' ' << student1.sf.addr << ' ' << endl << endl;
//插入第二条学生记录
StudentRecord student2 = StudentRecord(2, "敦介", 18, "上海");
pair < int, StudentRecord::StudentInfo > pairStudent2(student2.id,
student2.sf);
p = m.insert(pairStudent2);
if(!p.second)
cout << "插入学生记录失败:\n" << student2.id << ' ' << student2.sf.name <<
' ' << student2.sf.year << ' ' << student2.sf.addr << ' ' << endl << endl;
//插入第三条学生记录
StudentRecord student3 = StudentRecord(3, "译尹", 20, "深圳");
pair < int, StudentRecord::StudentInfo > pairStudent3(student3.id,
student3.sf);
p = m.insert(pairStudent3);
if(!p.second)
cout << "插入学生记录失败:\n" << student3.id << ' ' << student3.sf.name <<
' ' << student3.sf.year << ' ' << student3.sf.addr << ' ' << endl << endl;
//插入键值重复的学生记录,失败
StudentRecord student4 = StudentRecord(3, "李强", 26, "天津");
pair < int, StudentRecord::StudentInfo > pairStudent4(student4.id,
student4.sf);
p = m.insert(pairStudent4);
if(!p.second)
cout << "插入学生记录失败:\n" << student4.id << ' ' << student4.sf.name <<
' ' << student4.sf.year << ' ' << student4.sf.addr << ' ' << endl << endl;
//记录搜索
studentmap::iterator i = m.find(2);
cout << "搜索出学号为2的记录:\n" << (*i).first << ' ' << (*i).second.name <<
' ' << (*i).second.year << ' ' << (*i).second.addr << ' ' << endl << endl;
return 0;
}
// 13.3 本章小结 ---------------------------------------------------------------------------------