您的位置:首页 > 其它

删除Vector 结构体元素相同的,保留后面一个

2017-03-02 08:14 393 查看
#include <stdio.h>
#include <memory.h>
#include <string>
#include <iostream>
#include <opencv2/opencv.hpp>
#include <windows.h>
#include <shellapi.h>
#include <shlwapi.h>
#include <wininet.h>
#include <time.h>
#include <algorithm>
using namespace std;

struct link
{
string a;
string b;
bool operator <(const link& rhs) const
{
if(a!=rhs.a) return a <rhs.a;
return b <rhs.b;
}
bool operator==(const link& rhs) const
{
return a == rhs.a;
}
};

int main( int argc, char** argv )
{
vector <link> LinkV;
link lk;

lk.a="tiantain";
lk.b="zeze";
LinkV.emplace_back(lk);

lk.a="niuniu";
lk.b="doudou";
LinkV.emplace_back(lk);

lk.a="niuniu";
lk.b="maomao";
LinkV.emplace_back(lk);
//sort(LinkV.begin(),LinkV.end());
//	LinkV.erase(unique(LinkV.begin(),LinkV.end()), LinkV.end());
cout<<"原内容"<<endl;
for(int i=0; i<LinkV.size(); i++)
{
cout<<LinkV[i].a<<"  "<<LinkV[i].b<<endl;
}

vector <link> reLinkV;
vector<link>::reverse_iterator it= LinkV.rbegin();

for (it = LinkV.rbegin(); it != LinkV.rend(); ++it) // decrements iterator one element
{
//cout << it->a <<"   "<<it->b<<endl;
lk.a = it->a;
lk.b = it->b;
reLinkV.emplace_back(lk);
}

cout<<endl;
reLinkV.erase(unique(reLinkV.begin(),reLinkV.end()), reLinkV.end());
for(int i=0; i<reLinkV.size(); i++)
{
//cout<<reLinkV[i].a<<"    "<<reLinkV[i].b<<endl;
}

//再反回来,存入原来的容器中,原来的容器要清空下

LinkV.clear();//原来的容器要清空下

for (it = reLinkV.rbegin(); it != reLinkV.rend(); ++it) //把处理后的数据再重新放入之前的容器中
{
//cout << it->a <<"   "<<it->b<<endl;
lk.a = it->a;
lk.b = it->b;
LinkV.emplace_back(lk);
}

cout<<"处理后的内容"<<endl;
for(int i=0; i<LinkV.size(); i++)
{
cout<<LinkV[i].a<<"    "<<LinkV[i].b<<endl;
}

return 0;
}


结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐