关于数据中选择无重复数

来源:互联网 发布:淘宝直播开通入口 编辑:程序博客网 时间:2024/04/30 03:08

前几天,在做一个项目时从oracle海量数据中选择符合条件的数据,用到select distinct 改成c++语言;代码简化如下:

void select_distinct(vector<string> &ints)//实现select distinct的函数
{
          sort(ints.begin(),ints.end());
         vector<string>::iterator end_unique=unique(ints.begin(),ints.end());
         ints.erase(end_unique,ints.end());
}

 

之前自己的思路是,将里面重复的选择放在一块,没有重复放在一起然后将他们在组合起来,代码如下:

void find_diff(vector<string> &ints,vector<string> &final_ints)
{
 vector<string> ints_1;//存储相同的数
 vector<string> ints_2;//存储不同的数

 for(vector<string>::size_type i=0;i!=ints.size()-1;++i)//找到其中重复的数并单一的存储在ints_1(2,5)中
 {
  for (vector<string>::size_type j=i+1;j!=ints.size();++j)
  {

   if (ints[i]==ints[j])
   {
    if (ints_1.size()==0)
    {
     ints_1.push_back(ints[j]);
    }
    else
    {
     for (int tmp=0;tmp!=ints_1.size();++tmp)
     {
      if (ints[j]==ints_1[tmp])
       break;

      else if (ints[j]!=ints_1[tmp]&&tmp==ints_1.size()-1)//与存储的遍历一遍后都不相同,在最后时添加
       ints_1.push_back(ints[j]);
     }     
    }  
   }
  }
 }
 for(vector<string>::size_type i=0;i!=ints.size();++i)
 {
  for (vector<string>::size_type j=0;j!=ints_1.size();++j)
  {
   if (ints[i]==ints_1[j])
    break;

   if (ints[i]!=ints_1[j]&&j==ints_1.size()-1)
   {
    ints_2.push_back(ints[i]);
   }
  }
 }

 for(int i=0;i!=ints_1.size()+ints_2.size();++i)//输出不重复的
 {
  if (i<ints_1.size())
  {
   final_ints.push_back(ints_1[i]);
  }
  else
   final_ints.push_back(ints_2[i-ints_1.size()]);
 }
}
在一些数据中是可以的,但是当容器中只有一个值时明显不符合情况:

 for(vector<string>::size_type i=0;i!=ints.size();++i)
 {
  for (vector<string>::size_type j=0;j!=ints_1.size();++j)

可以加上判断条件:

  for(vector<string>::size_type i=0;i!=ints.size();++i)
  {
   if(ints_1.size()!=0)
   {
    for (vector<string>::size_type j=0;j!=ints_1.size();++j)
    {
     if (ints[i]==ints_1[j])
      break;

     if (ints[i]!=ints_1[j]&&j==ints_1.size()-1)
     {
      ints_2.push_back(ints[i]);
     }
    }
   }
   else
   {
    ints_2.push_back(ints[i]);
   }
  }

然后对于空容器来说类似的


 if (ints.size()==0)
 {
 }
 else

 

这个只是自己的一个比较繁琐的思路。

总结下:

多看书,自己慢慢进步;

算法中提到的sort函数,unique函数等都是见到后想到的,希望自己多留心多学习。网站学习http://blog.csdn.net/byrsongQQ/article/details/5855090