c++中如何求两个数组的并集_c++数组并集实现方式

使用set可自动去重并排序,适合有序结果;unordered_set基于哈希,效率高但无序;vector结合sort与unique适用于仅用序列容器的场景。

c++中如何求两个数组的并集_c++数组并集实现方式

在C++中求两个数组的并集,目标是将两个数组中的所有不重复元素合并到一个集合中。常用的方法包括使用标准库中的setunordered_set去重,或者结合vector与算法函数实现。以下是几种常见的实现方式。

使用 set 实现数组并集

set容器本身具有自动排序和去重的特性,适合用来求并集。

将两个数组的所有元素插入一个set中 set会自动去除重复元素并保持有序 结果即为并集

示例代码:

#include #include #include std::set unionArrays(const std::vector& arr1, const std::vector& arr2) {    std::set result;    for (int x : arr1) result.insert(x);    for (int x : arr2) result.insert(x);    return result;}int main() {    std::vector a = {1, 2, 3, 4};    std::vector b = {3, 4, 5, 6};    std::set uni = unionArrays(a, b);    for (int x : uni) {        std::cout << x << " ";    }    // 输出:1 2 3 4 5 6    return 0;}

使用 unordered_set 实现(无需排序)

如果不需要结果有序,unordered_set效率更高,尤其适用于大数据量。

立即学习“C++免费学习笔记(深入)”;

利用哈希表去重 插入时间复杂度平均为 O(1) 最终可转为vector或其他结构

示例代码:

#include #include #include std::vector unionArraysUnordered(const std::vector& arr1, const std::vector& arr2) {    std::unordered_set set;    for (int x : arr1) set.insert(x);    for (int x : arr2) set.insert(x);    return std::vector(set.begin(), set.end());}

使用 vector + sort + unique 实现

若想避免使用set类,也可以用vector手动处理。

先合并两个数组到vector 排序后使用std::unique去除相邻重复元素 需配合erase使用才能真正删除

示例代码:

#include #include #include std::vector unionArraysUnique(std::vector arr1, std::vector arr2) {    std::vector result;    result.insert(result.end(), arr1.begin(), arr1.end());    result.insert(result.end(), arr2.begin(), arr2.end());    std::sort(result.begin(), result.end());    auto it = std::unique(result.begin(), result.end());    result.erase(it, result.end());    return result;}

这种方法适合对内存控制较严格或不想引入额外容器的场景。

总结

三种方式各有适用场景:

set:需要有序结果,代码简洁 用unordered_set:追求性能,不要求顺序 用vector+unique:希望只依赖vector,避免关联容器

基本上就这些常见做法,选择取决于是否需要排序、性能要求以及数据规模。

以上就是c++++中如何求两个数组的并集_c++数组并集实现方式的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1477008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 01:39:46
下一篇 2025年12月10日 20:23:58

相关推荐

  • c++如何用引用传递参数_c++引用传参方法

    引用传递可避免大对象拷贝开销并允许修改实参,语法为void func(类型& 引用名),常量引用const Type&用于只读场景,相比指针更安全简洁,适用于大型对象、需修改参数值及操作符重载等情况。 在C++中,使用引用传递参数可以避免拷贝大对象带来的性能开销,同时允许函数修改实参…

    2025年12月19日
    000
  • c++ string怎么分割字符串_c++ 字符串分割方法

    C++中可通过stringstream按空格分割字符串;2. 使用find和substr可实现指定字符分割;3. getline配合stringstream适合处理如逗号等分隔符;4. 多字符或复杂模式可用正则分割;5. 需注意空字符串和边界情况处理。 在C++中,标准库没有提供像Python的sp…

    2025年12月19日
    000
  • c++中如何自定义排序规则排序vector_c++ vector自定义排序技巧

    答案:C++中可通过std::sort结合函数指针、Lambda表达式或函数对象对vector进行自定义排序,如按成绩降序或名字升序,推荐使用Lambda实现简洁逻辑。 在C++中,对vector进行自定义排序是常见需求,尤其是在处理复杂数据类型时。我们可以通过std::sort配合自定义比较函数、…

    2025年12月19日
    000
  • c++中this指针是什么_this指针核心作用解析

    this指针是C++中隐含于非静态成员函数的指向当前对象的常量指针,用于解决命名冲突、实现链式调用、访问成员及判断对象同一性,常见于运算符重载与单例模式,不可用于静态函数且不能修改其指向。 this指针是C++中一个非常基础且重要的概念,它是一个隐含在每一个非静态成员函数中的特殊指针,指向调用该成员…

    2025年12月19日
    000
  • c++怎么调用外部exe程序_C++执行外部可执行文件的几种方法

    使用system()函数可快速调用外部exe,如system(“notepad.exe”),优点是跨平台且简单,但安全性低且阻塞主线程;2. Windows平台推荐使用CreateProcess(),能精确控制进程启动并获取状态,示例中通过STARTUPINFO和PROCES…

    2025年12月19日
    000
  • c++怎么使用正则表达式匹配字符串_c++正则表达式使用方法

    C++中使用正则需包含头文件,支持regex_match(完全匹配)、regex_search(部分查找)和regex_replace(替换),结合smatch提取分组信息,可实现字符串验证、查找、替换等操作。 在C++中使用正则表达式,主要依赖于标准库中的 头文件。从 C++11 开始,std::…

    2025年12月19日
    000
  • c++怎么实现类型擦除_c++类型擦除实现方法

    答案是使用虚函数实现类型擦除的核心在于通过抽象基类定义统一接口,模板派生类封装具体类型,外部类持有基类指针以实现多态调用。示例中AnyFunction通过继承体系包装任意可调用对象,调用时无需知晓原始类型,从而实现类型无关的接口统一。 在C++中,类型擦除(Type Erasure)是一种让不同类型…

    2025年12月19日
    000
  • c++中如何使用结构体实现栈_c++结构体栈实现技巧

    使用结构体封装栈的数组、栈顶指针和容量,通过构造函数初始化;2. 实现push、pop、topElement和empty等操作,确保入栈出栈时检查边界;3. 利用成员函数或全局函数操作栈数据,提升代码可读性和复用性。 在C++中,使用结构体实现栈是一种常见且高效的方式。通过结构体可以封装数据和操作,…

    2025年12月19日
    000
  • c++中的“最令人烦恼的解析”(Most Vexing Parse)是什么_c++ Most Vexing Parse解析

    最令人烦恼的解析指C++中编译器将对象初始化误判为函数声明的现象,如TimeKeeper tk(Timer())被解析为函数声明而非对象构造,可通过C++11统一初始化语法TimeKeeper tk{Timer{}}或拷贝初始化等方式避免。 在C++中,“最令人烦恼的解析”(Most Vexing …

    2025年12月19日
    000
  • c++怎么实现多线程_c++多线程实现方法

    使用std::thread实现多线程是C++11起的标准方法,支持函数、lambda和函数对象作为线程目标,无需依赖平台API。 在C++中实现多线程,最常用的方式是使用标准库中的 std::thread。从 C++11 开始,C++ 提供了对多线程的原生支持,无需依赖第三方库或平台特定的API(如…

    2025年12月19日
    000
  • c++中如何使用tuple存储多个值_c++ tuple存储多值方法

    答案:tuple是C++中存储多个不同类型值的容器,通过make_tuple或直接构造创建,用std::get按索引访问和修改元素,C++17支持结构化绑定解包,可用std::tuple_size_v获取元素数量,适用于返回多值或复合键等轻量场景。 在C++中,tuple 是一种可以存储多个不同类型…

    2025年12月19日
    000
  • c++中如何重复拼接字符串_c++字符串重复拼接技巧

    答案:通过循环使用+=操作符可实现字符串重复拼接,适合小规模场景。示例函数repeatString将输入字符串str重复n次,利用for循环和std::string的+=操作符逐步构建结果,代码清晰直观。 在C++中,重复拼接字符串是一个常见需求,比如生成重复模式的文本、填充字符等。虽然C++标准库…

    2025年12月19日
    000
  • c++怎么实现一个工厂模式_c++工厂模式实现方法

    工厂模式通过基类指针和多态实现对象创建,定义抽象产品类Product及具体类ConcreteProductA,使用智能指针管理生命周期,确保派生类实现use接口。 工厂模式是一种创建型设计模式,用于在不指定具体类的情况下创建对象。在C++中,通过基类指针和多态机制可以很好地实现工厂模式。下面介绍一个…

    2025年12月19日
    000
  • c++中如何在类中使用静态函数_c++类静态函数用法

    静态函数属于类而非对象,可通过类名直接调用。它只能访问静态成员变量或其他静态函数,常用于操作与类相关的共享数据,如统计对象数量等。 在C++中,静态函数(static member function)属于类本身,而不是类的某个对象实例。这意味着你可以在不创建类对象的情况下调用静态函数。它常用于实现与…

    2025年12月19日
    000
  • c++中如何格式化时间输出_c++时间格式化输出方法

    使用C++格式化时间需结合chrono、ctime与strftime函数,先获取当前时间戳并转为本地tm结构,再用strftime按%Y-%m-%d %H:%M:%S等格式输出到缓冲区,推荐使用std::array防溢出。 在C++中格式化时间输出,通常使用标准库中的 chrono 和 ctime …

    2025年12月19日
    000
  • c++中如何实现动态规划爬楼梯_c++动态规划爬楼梯实现方法

    爬楼梯问题通过动态规划求解,递推关系为f(n)=f(n-1)+f(n-2),初始条件f(0)=1、f(1)=1;2. 使用数组自底向上计算避免重复,空间优化版本用两个变量替代数组,降低空间复杂度至O(1)。 在C++中,动态规划(Dynamic Programming, DP)是解决“爬楼梯”问题的…

    2025年12月19日
    000
  • C++如何创建一个对象指针_C++ 对象指针创建方法

    创建对象指针需先定义类,再用new在堆上分配内存或指向已有对象。示例:class MyClass { public: int value; void print() { std::cout value = 20; ptr->print(); 推荐使用智能指针:#include std::uni…

    2025年12月19日
    000
  • c++怎么实现一个位图数据结构_c++位图数据结构实现方法

    位图使用位操作高效存储布尔值,每个位表示一个整数的存在性,适合去重、查找等场景。通过std::vector可实现动态位图,支持set、reset、test操作,内存占用小且访问速度快。 在C++中实现一个位图(Bitmap)数据结构,主要是利用位操作来高效地存储和操作布尔值集合。每个位代表一个状态(…

    2025年12月19日
    000
  • C++如何使用map_C++ map使用方法

    C++中map是基于红黑树的关联容器,自动按键排序存储键值对。需包含头文件,支持insert、下标、emplace插入;可用下标、find、at访问;支持迭代器遍历和erase删除;常用函数有size、empty、clear、count,适用于高效查找与有序场景。 在C++中,map 是一个非常实用…

    2025年12月19日
    000
  • c++怎么读取二进制文件_c++ 二进制文件读取方法

    使用std::ifstream以std::ios::binary模式打开文件可正确读取二进制数据,避免文本转换错误,适用于图片、音频等原始字节处理。 在C++中读取二进制文件,主要使用标准库中的 fstream 类,并以二进制模式打开文件。与文本文件不同,二进制文件按字节原始数据读取,不会进行字符转…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信