答案:std::unique用于去除容器中连续重复元素,需先排序并配合erase使用。

在C++ STL中,unique 方法用于去除容器中连续重复的元素,但它并不会自动对整个容器排序或删除所有重复值。它只移除相邻的重复项,因此通常需要先排序才能实现“全局去重”。
基本用法与原理
std::unique 是定义在 gorithm> 头文件中的函数模板,作用是将连续重复的元素“前移”,并返回一个迭代器,指向去重后有效元素的末尾。实际的容器大小不会改变,需要手动调用 erase 方法来真正删除多余元素。
常见用法如下:
// 示例:vector 去重#include #include #include iostream>std::vector vec = {1, 2, 2, 3, 3, 3, 4};// 1. 先排序,使相同元素相邻std::sort(vec.begin(), vec.end());// 2. 使用 unique 去除连续重复auto it = std::unique(vec.begin(), vec.end());// 3. 删除无效部分vec.erase(it, vec.end());// 输出结果:1 2 3 4for (int x : vec) std::cout
自定义类型或条件去重
std::unique 支持传入自定义的比较函数,用于判断两个元素是否“相等”。比如,对字符串忽略大小写去重,或对结构体按某个字段判断。
立即学习“C++免费学习笔记(深入)”;
// 示例:按绝对值去重std::vector nums = {-2, -1, 1, 2, 3};std::sort(nums.begin(), nums.end(), [](int a, int b) { return std::abs(a)
此时结果可能为 {-1, 2, 3} 或 {1, -2, 3} 等,取决于排序和原始顺序。
适用于哪些容器?
std::unique 要求迭代器是双向迭代器,因此适用于:
std::vector std::deque std::array std::list(但 list 更推荐使用成员函数 unique)
注意:std::list 和 std::forward_list 提供了成员函数 list::unique(),可以直接使用,且支持自定义比较。
std::list lst = {1, 2, 2, 3, 3, 3};lst.sort(); // list 需要先排序lst.unique(); // 直接去重
注意事项
使用 unique 时容易犯的错误:
忘记排序,导致非连续重复未被去除 忘记调用 erase,容器大小未变,残留无效数据 在未排序的序列中误以为能全局去重
std::unique 的时间复杂度是 O(n),前提是元素已排序。比较次数为 n-1 次。
基本上就这些。掌握 sort + unique + erase 这个组合,就能高效实现 STL 容器的去重。
以上就是C++如何在STL中实现容器去重unique方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1474551.html
微信扫一扫
支付宝扫一扫