C 或 C++ 中去除字符串中重复项的有关问题

C 或 C++ 中去除字符串中重复项的问题
CString str="操作员,38d530a786319f0b,2016-2-19 7:12:50|审核员,10b29db7d7b6260a,2016-2-19 7:13:46|管理员,5c775dccb9b89fa5,2016-2-19 7:3:38|操作员,63a99f015106cd44,2016-2-19 6:5:50"

CString字符串各项用"|"分隔,蓝色字体是截止日期,需求是去掉红色字体相同且截止日期较远的项,比如示例字符串中,要去掉"操作员,63a99f015106cd44,2016-2-19 6:5:50"这项,谢谢!~
------解决方案--------------------
map是会自动调整顺序的,不想改顺序的话就用list吧

#include <map>
#include <iostream>
#include <afx.h>


using namespace std;


int main()
{
CString str=_T("操作员,38d530a786319f0b,2016-2-19 7:12:50
------解决方案--------------------
审核员,10b29db7d7b6260a,2016-2-19 7:13:46
------解决方案--------------------
管理员,5c775dccb9b89fa5,2016-2-19 7:3:38
------解决方案--------------------
操作员,63a99f015106cd44,2016-2-19 6:5:50
------解决方案--------------------
操作员,63a99f015106cd44,2016-2-19 8:5:50");

map<CString,CString> mpRecord;
map<CString,CString>::iterator iterRecord;

CString strKey,strData,strTemp;
int pos=0,pos2=0,pos3=0;

while(pos<str.GetLength())  //主循环,一次提取一段到
------解决方案--------------------
字符的内容
{
strKey=str.Tokenize(_T(","),pos);  //提取**员
strData=str.Tokenize(_T("
------解决方案--------------------
"),pos); //提取到
------解决方案--------------------

if((iterRecord=mpRecord.find(strKey))!=mpRecord.end()) //如果在map中有过**员
{
pos2=0;pos3=0;
strData.Tokenize(_T(","),pos2);
(iterRecord->second).Tokenize(_T(","),pos3);  //过滤时间之前的内容
const wchar_t split[]=_T("-- ::");            //符号表,分段提取时间,并比较
for(int i=0;i<5;++i)
{
if(_ttoi(strData.Tokenize(&split[i],pos2))>_ttoi((iterRecord->second).Tokenize(&split[i],pos3)))
{
iterRecord->second=strData; //时间新的替换时间旧的
break;
}
}
}
else
{
mpRecord.insert(make_pair(strKey,strData));  //在map中没有出现过,插入新的
}
}


//循环打印map内容
std::locale loc("");
std::wcout.imbue(loc);
for(iterRecord=mpRecord.begin();iterRecord!=mpRecord.end();++iterRecord)
{
wcout<<((iterRecord->first).GetString())<<","<<(iterRecord->second).GetString()<<endl;
}
return 0;
}