如何解决为什么 sort() 或 unique() 不适用于 int 向量C++?
sort() 和 unique() 不适用于这样一个简单的 int 向量。 欢迎提出任何建议。
std::vector<int>vec {33,25,11,44,22,20,12,33,59,87,23,53,26,97,32,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;
}
返回:
11 12 20 22 23 25 26 32 33 43 44 53 59 87 97 44 44 53 59 87 97 21请注意,数字既没有排序,也没有排除重复项(我标记为 44、53)。
**UPD:感谢贡献者,这是解决方案: 而不是
std::unique(vec.begin(),vec.end());
我们输入:
auto last = std::unique(vec.begin(),vec.end());//returns an iterator to non-unique elements
vec.erase(last,vec.end());// and kills them
解决方法
std::sort
工作正常。至于 std::unique
- 它不会改变向量的大小,它只是在向量的开头创建一个子序列,其中包含所有不同元素的一个副本的序列。因此,正如您在自己的评论中指出的那样 - 您需要保持迭代器 std::unique
返回,并从向量的开头迭代到该结束迭代器。
使用 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。