如何对Vector进行排序并删除相同的值?

时间:2013-05-25 14:49:19

标签: c++ algorithm vector

我有一个包含数据的向量,例如:15,27,40,50,15,40

我想对它进行排序并删除相同的值,因此排序后的输出应为:15,27,40,50

我尝试了几种方法:

std::sort(vectProjHori.begin(),vectProjHori.end());
for (std::vector<int>::iterator it=vectProjHori.begin(); it!=vectProjHori.end(); ++it)
{
    if(it+1 != it)
    {
        std::cout << ' ' << *it;
    }
}

但是,它无法在向量中删除相同的值。 我真的希望有人愿意提供一种有效的方法。

任何帮助都将受到高度赞赏。 谢谢

3 个答案:

答案 0 :(得分:7)

您可以使用标准功能执行此操作。

std::sort(vectProjHori.begin(), vectProjHori.end());
vectProjHori.erase(std::unique(vectProjHori.begin(), vectProjHori.end()), vectProjHori.end());

答案 1 :(得分:1)

it + 1肯定不是it;你需要在比较之前首先取消引用。

答案 2 :(得分:0)

这将完成你的工作,但上面的mwerschy代码更好。 C ++ 11

#include <iostream>
#include <algorithm>
#include <iterator>


int main() { 

  std::vector<int> v={1,2,8,4,5,5};
  std::sort(v.begin(),v.end());
  auto it=std::unique(v.begin(),v.end());
  v.resize(std::distance(v.begin(),it));
  std::copy(v.begin(),v.end(),std::ostream_iterator<int>(std::cout,"\n"));

 }

输出将是:

1
2
4
5
8