Sorting 为什么赢了';t sort()或unique()是否与int向量(C+;+;)一起工作?

Sorting 为什么赢了';t sort()或unique()是否与int向量(C+;+;)一起工作?,sorting,c++11,vector,stl,unique,Sorting,C++11,Vector,Stl,Unique,sort()和unique()不能用于如此简单的int向量。 欢迎提出任何建议 std::vector<int>vec {33,25,11,44,22,20,12,33,59,87,23,53,26,44,26,97,22,32,44,43,44}; std::sort(vec.begin(), vec.end()); std::unique(vec.begin(), vec.end()); int nr = 1; std::cout << std::endl; for

sort()和unique()不能用于如此简单的int向量。 欢迎提出任何建议

std::vector<int>vec {33,25,11,44,22,20,12,33,59,87,23,53,26,44,26,97,22,32,44,43,44};
std::sort(vec.begin(), vec.end());
std::unique(vec.begin(), vec.end());

int nr = 1;
std::cout << std::endl;
for (auto p = vec.begin(); p!=vec.end(); p++){
    std::cout << *p << " ";
    if (!(nr++%4)) std::cout << std::endl;
}
我们输入:

    auto last = std::unique(vec.begin(), vec.end());//returns an iterator to non-unique elements
    vec.erase(last, vec.end());// and kills them

使用
std::set
会更有益

您可以使用向量排序+唯一方法

sort( vec.begin(), vec.end() );
vec.erase( unique( vec.begin(), vec.end() ), vec.end() );
你会得到这份回报

[1,10]      1.6821   
[1,1000]    5.0773  
[1,100000]  8.7955  

使用
std::set
会更有益

您可以使用向量排序+唯一方法

sort( vec.begin(), vec.end() );
vec.erase( unique( vec.begin(), vec.end() ), vec.end() );
你会得到这份回报

[1,10]      1.6821   
[1,1000]    5.0773  
[1,100000]  8.7955  

std::sort
工作正常。至于
std::unique
,它不会改变向量的大小,只会在向量的开头创建一个子序列,该序列包含所有不同元素的一个副本。因此,正如您在自己的注释中所指出的,您需要保持迭代器返回,并从向量的开始到迭代器的结束进行迭代。

std::sort工作正常。至于
std::unique
,它不会改变向量的大小,只会在向量的开头创建一个子序列,该序列包含所有不同元素的一个副本。因此,正如您在自己的评论中所指出的,您需要保持迭代器返回,并从向量的开始到迭代器的结束进行迭代。

Wow,它成功了!真正地所以,改变的是:
auto last=std::unique(vec.begin(),vec.end())
vec.erase(最后一个,vec.end())非常感谢哇,成功了!真正地所以,改变的是:
auto last=std::unique(vec.begin(),vec.end())
vec.erase(最后一个,vec.end())非常感谢。是的,这套对我来说很好。一套很容易。当前的练习是使用向量的。是的,设置对我来说很好。一套很容易。当前练习用于使用向量。