问题描述:
在快递数据中,快递会在不同的时间会刷新,这样对同一个快递编号会有多个时间信息与之对应,现在只要保留最近一次的时间信息。
输入范例:
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;
}