当前位置: 首页 > news >正文

vector中去除重复的元素

1. 使用 std::sort 和 std::unique

这种方法首先对 std::vector 进行排序,然后使用 std::unique 函数将相邻的重复元素移到末尾,最后使用 erase 函数删除这些重复元素。

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> vec = {1, 2, 2, 3, 4, 4, 5};// 排序std::sort(vec.begin(), vec.end());// 使用 std::unique 移动重复元素到末尾auto last = std::unique(vec.begin(), vec.end());// 删除重复元素vec.erase(last, vec.end());//也可以使用一行代码//vec.erase(std::unique(vec.begin(), vec.end()), vec.end());// 输出结果std::cout << "After removing duplicates: ";for (int n : vec) {std::cout << n << " ";}std::cout << std::endl;return 0;
}

2. 使用 std::set

这种方法利用 std::set 的特性,即 std::set 中的元素是唯一的。将 std::vector 中的元素插入到 std::set 中,然后再将 std::set 中的元素复制回 std::vector

#include <iostream>
#include <vector>
#include <set>int main() {std::vector<int> vec = {1, 2, 2, 3, 4, 4, 5};// 使用 std::set 去重std::set<int> s(vec.begin(), vec.end());// 将 std::set 中的元素复制回 std::vectorvec.assign(s.begin(), s.end());// 输出结果std::cout << "After removing duplicates: ";for (int n : vec) {std::cout << n << " ";}std::cout << std::endl;return 0;
}

3. 使用 std::unordered_set

这种方法类似于使用 std::set,但 std::unordered_set 不保证元素的顺序。如果不需要保持元素的顺序,可以使用 std::unordered_set,它的插入和查找操作通常比 std::set 更快。

#include <iostream>
#include <vector>
#include <unordered_set>int main() {std::vector<int> vec = {1, 2, 2, 3, 4, 4, 5};// 使用 std::unordered_set 去重std::unordered_set<int> s(vec.begin(), vec.end());// 将 std::unordered_set 中的元素复制回 std::vectorvec.assign(s.begin(), s.end());// 输出结果std::cout << "After removing duplicates: ";for (int n : vec) {std::cout << n << " ";}std::cout << std::endl;return 0;
}

总结
- std::sort 和 std::unique:适合需要保持元素顺序的场景。
- std::set:适合需要自动去重和排序的场景。
- std::unordered_set:适合不需要保持元素顺序且需要高效去重的场景。

选择合适的方法取决于具体的需求和使用场景。


http://www.mrgr.cn/news/62878.html

相关文章:

  • 在linux中arm-linux-gcc和/usr/bin/gcc有啥区别
  • 速来!一篇笔记带你了解 MS Office 高频考点(Excel 篇)
  • 中小企业设备资源优化:Spring Boot系统实现
  • 放电消纳负载箱应用经验有哪些?
  • Swarm-LIO: Decentralized Swarm LiDAR-inertial Odometry论文翻译
  • git入门教程16:git简明教程,一篇够了
  • [UVM] objection笔记
  • 7个提高 Python 代码运行效率的小贴士
  • 自制田字格word
  • Spring Boot2.x教程:(十)从Field injection is not recommended谈谈依赖注入
  • 《优化工厂模式:降低对象创建开销的秘籍》
  • 心觉:抄袭是一种智慧
  • 突破语言壁垒:Cohere 发布多语言大模型 Aya Expanse
  • 我在命令行下剪辑视频
  • SimpleQA:OpenAI 开源评估大模型事实性的基准测试
  • 多浏览器同步测试工具的设计与实现
  • 同事离职了,他写的代码我找不到了?咋办呢
  • GitGraphPro 图管理系统
  • vivado-vitis-2024.1 ps_hello_world 实验
  • 递归的使用
  • spark==windows启动spark集群
  • [java][高级]RequestResponse
  • 【实战篇】requests库 - 有道云翻译爬虫 【附:代理IP的使用】
  • 【算法】【优选算法】双指针(上)
  • Qt(文件IO)
  • Spring Boot 集成 RabbitMQ