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

来源:互联网 发布:兄贵音源软件 编辑:程序博客网 时间:2024/06/08 03:55


#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;}

结果:


0 0
原创粉丝点击