c++ primer 关联容器习题练习

  学习关联容器一章,看到map,稀稀松松已经看到第10章。基础东西学了一大堆,做个习题巩固一下。

 问题如下:

               

代码如下:

            

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
#include <map>
#include <utility>

using namespace std;

int main()
{
  ifstream in_file,res_file;
  string line,str_first,str_name;
  int int_date;
  in_file.open("123.txt"); //文件格式为 第一列姓名,第二列名字,第三列生日
  typedef pair<string,int> name_date;
  typedef map<string,vector<name_date> > name_first;
  name_first first_name;
  vector<name_date> vec_con;
  while (getline(in_file,line))
  {
   istringstream in_string(line);
   while (in_string>>str_first>>str_name>>int_date)
   {
    pair<name_first::iterator,bool> pair_insert;
    vec_con.push_back(make_pair(str_name,int_date));
    pair_insert=first_name.insert(make_pair(str_first,vec_con));  /
    if (!pair_insert.second)
    {
     pair_insert.first->second.push_back(make_pair(str_name,int_date));
    }
   }
   vec_con.clear();
  }

//insert成功,证明map中无此姓氏存储,失败则有存储,需要更新姓氏对应的vector
  in_file.close();
  for (name_first::iterator map_it = first_name.begin();
  map_it != first_name.end(); map_it++)
  {
   cout<<map_it->first<<":"<<endl;
   for (vector<name_date>::iterator vec_it = map_it->second.begin();
   vec_it != map_it->second.end(); vec_it++)
   {
    cout<<vec_it->first<<"->"<<vec_it->second<<endl;
   }
  }
 
  return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值