欣乐

The eagles are coming!

导航

第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

 

posted on 2014-11-20 20:14  欣乐  阅读(104)  评论(0编辑  收藏  举报