第13章 map映照容器

/*

  第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 本章小结 ---------------------------------------------------------------------------------

TOP

时间: 2024-12-13 01:10:56

第13章 map映照容器的相关文章

map映照容器

map映照容器的元素数据是一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系.  map映照容器的数据结构是采用红黑树来实现的,插入键值的元素不允许重复,比较函数只对元素的键值进行比较,元素的各项数据可通过键值检索出来.  使用map容器需要头文件包含语句“#include<map>”. 1.map创建.元素插入.和遍历访问: 创建map对象,键值与映照数据的类型由自己定义.在没有指定比较函数时,元素的插入位置是按照值由小到大插入到红黑树中去的,这点和我们之前讲的set一样.

C++ Primer(第五版)学习笔记_8_标准模板库_map映照容器

C++ Primer(第五版)学习笔记_8_标准模板库_map映照容器 map映照容器的元素数据是由一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系. map映照容器的数据结构也是采用红黑树来实现的. 1.map创建.元素插入和遍历访问 #include <iostream> #include <stdio.h> #include <vector> #include <map> #include <string> using n

第14章 multimap多重映照容器

/* 第14章 multimap多重映照容器 14.1 multimap技术原理 14.2 multimap应用基础 14.3 本章小结 */ // 第14章 multimap多重映照容器 // 14.1 multimap技术原理 ------------------------------------------------------------------------------ // 14.2 multimap应用基础 ----------------------------------

第16章 hash_map哈希映照容器

/* 第16章 hash_map哈希映照容器   16.1 hash_map技术原理   16.2 hash_map应用基础   16.3 本章小结 略 */

multimap 多重映照容器[转]

multimap 多重映照容器 multimap 与 map 一样,都是使用红黑树对记录型的元素数据,按元素键值的比较关系,进行快速的插入.删除和检索操作,所不同的是 multimap 允许将具有重复键值的元素插入容器.在 multimap 容器中,元素的键值与元素的映照数据的映照关系,是多对多的,因此,multimap 称为多重映照容器.multimap 与 map 之间的多重特性差异,类似于 multiset 与 set 的多重特性差异.    multimap 多重映照容器实现了 Sort

敏捷软件开发:原则、模式与实践——第13章 写给C#程序员的UML概述

第13章 写给C#程序员的UML概述 UML包含3类主要的图示.静态图(static diagram)描述了类.对象.数据结构以及它们之间的关系,藉此表现出了软件元素间那些不变的逻辑结构.动态图(dynamic diagram)展示了软件实体在运行过程中是如何变化的,其中描述了运行流程或者实体改变状态的方式.物理图(physical diagram)展示了软件实体不变的物理结构,其中描述了诸如源文件.库.二进制文件.数据文件等物理实体以及它们之间的关系. 查看如下代码,这段程序实现了一个基于简单

《C++Primer》12、13章

第12章 动态内存 12.1 智能指针 shared_ptr<T> make_shared<T>(args) 直接初始化 new int(10); 默认初始化 new int; 值初始化 new int(); 由内置指针(而不是智能指针)管理的动态内存在被显示释放前一直都会存在. 最好坚持只使用智能指针: delete之后重置指针值为nullptr: unique_ptr u = nullptr 释放u指向的对象,将u置为空 u.release()  u放弃对指针的控制权,返回指针

2017.2.21 activiti实战--第七章--Activiti与容器集成

学习资料:<Activiti实战> 第七章 Activiti与容器集成 本章讲解activiti-spring可以做的事情,如何与现有系统集成,包含bean的注入.统一事务管理等. 7.1 流程引擎工厂 7.1.1 ProcessEngine 创建processEngine的方法有三种: 1 通过配置文件 2 测试中通过ActivitiRule 3 通过ProcessEngines类 7.1.2 ProcessEngineFactory 与spring集成的目的有两个: 1 通过spring统

tomcat(13)Host和Engine容器

[0]README 0.1)本文部分文字描述转自 "how tomcat works",旨在学习 "tomcat(13)Host和Engine容器" 的基础知识: 0.2)Host容器:若你想在同一个tomcat部署 上运行多个Context 容器的话,就需要使用 Host 容器:它是Context容器的父容器:(干货--若你想在同一个tomcat部署 上运行多个Context 容器的话,就需要使用 Host 容器,Host容器表示包含有一个或多个 Context容