C++经典案例:处理重复快递数据

问题描述:

        在快递数据中,快递会在不同的时间会刷新,这样对同一个快递编号会有多个时间信息与之对应,现在只要保留最近一次的时间信息。

输入范例:

2018/02/14-12:30|nike
2018/10/14-12:30|nike
2018/12/14-12:30|nike
2018/04/14-12:30|nike
2018/03/14-12:30|nike
2018/09/14-12:30|nike
2018/08/14-12:30|adidas
2018/06/14-12:30|adidas
2018/03/14-12:30|adidas
2018/11/14-12:30|adidas
2018/01/14-12:30|adidas

期望输出:

2018/11/14-12:30|adidas
2018/12/14-12:30|nike

示例代码:

#include <iostream>
#include <fstream>
#include <map>
#include <vector>
#include <cstring>

using namespace std;

vector<string> handle(vector<string> & v)
{
	vector<string> vtmp;	
	map<string, string> m;
	for(vector<string>::iterator vit = v.begin(); vit != v.end(); vit++)
	{
		string temp = *vit;
		int offset = temp.find_first_of("|");
		int size = temp.size();
		string goodkey = temp.substr(offset+1, size);
		string goodtime = temp.substr(0, offset);
//		cout << goodkey << ":" << goodtime << endl;
 		m.insert(make_pair(goodkey, goodtime));
 		if(goodtime > m[goodkey])
 		{
 			m[goodkey] = goodtime;
		}
	}
	
//	for(map<string, string>::iterator mit = m.begin(); mit != m.end(); mit++)
//	{
//		cout << mit->first << ":" << mit->second << endl;
//	}
	for(map<string, string>::iterator mit = m.begin(); mit != m.end(); mit++)
	{
		string temp = mit->second + "|" + mit->first;
		vtmp.push_back(temp);
	}
	
	return vtmp;	
}
int main()
{
	string temp;
	vector<string> v;
	ifstream fin;
	fin.open("express.txt");
	while(!fin.eof())
	{
		getline(fin, temp);
		v.push_back(temp);
	}
	cout << "before sort :" << endl;
	for(vector<string>::iterator vit = v.begin(); vit != v.end(); vit++)
	{
		cout << *vit << endl;
	}
	v = handle(v);
	cout << endl << endl; 
	cout << "after sort :" << endl;
	for(vector<string>::iterator vit = v.begin(); vit != v.end(); vit++)
	{
		cout << *vit << endl;
	}
	return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值