Sorting 为什么赢了';t sort()或unique()是否与int向量(C+;+;)一起工作?
sort()和unique()不能用于如此简单的int向量。 欢迎提出任何建议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
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())代码>非常感谢。是的,这套对我来说很好。一套很容易。当前的练习是使用向量的。是的,设置对我来说很好。一套很容易。当前练习用于使用向量。