首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

双重循环有关问题:结构体vector删除重复元素

2012-03-16 
双重循环问题:结构体vector删除重复元素现在有结构体向量:structlink{CStringaCStringb}link1,link2vec

双重循环问题:结构体vector删除重复元素
现在有结构体向量:
struct   link
{
CString   a;
CString   b;
}link1,link2;

vector   <   link   >   v1,v2;
                  int   i,j;

v1中已经存放了一些数据,但这些link有重复的,既a,b分别相等。   比如说:link1:123--45,   link2:123--45就是相等的两个link.我想把v1中的重复link删去,只保留一个,写进v2中。   下面是我的程序:

v2.push_back(v1.at(0));//把v1第一个元素放入v2
int   counter=0;   //   设定计数器   统计v2中的比较次数  
for   (i=1;   i <v1.size();   ++i)   //循环比较v1的全部元素
{

  for   (j=0;   j <v2.size();   ++j)   //每一个v1中元素和v2中已经放进去的元素比较
    {
          if   (   (   ((v1.at(i)).a).Compare(((v2.at(j)).a))==0   )   &&  
                    (   ((v1.at(i)).b).Compare(((v2.at(j)).b))==0   )   )
//如果相等   跳出循环   进行v1中下一个元素的比较
goto   n;
          else
{
                        ++counter;
      if   (   counter   ==   (v2.size())   )   //如果和v2中所有元素都不相等
      goto   m;
}

      }
      m:   v2.push_back(   (v1.at(i))   );   //就添加到v2尾部
      n:   ;
}

然后输出v2,结果竟然和v1的内容一样,全部写入v2了。根本就没有执行比较阿
各位能帮我看看是不是我的算法哪里有问题,万分感谢!

[解决办法]
把string改为CString,增加相应的头文件及测试代码即可。

#include <vector>
#include <algorithm>
#include <string>
using namespace std;

struct link
{
string a,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 && b==rhs.b;
}
};

int main()
{
vector <link> LinkV;
sort(LinkV.begin(),LinkV.end());
LinkV.erase(unique(LinkV.begin(),LinkV.end()),LinkV.end());
}

热点排行