如何将多个集合合并为一个 std::set(集合并集)

发布于 2024-11-30 00:24:21 字数 103 浏览 0 评论 0原文

我想知道是否有任何 std 库或 boost 工具可以轻松地将多个集合的内容合并为一个集合。

就我而言,我有一些想要合并的set

I would like to know if there is any std library or boost tool to easily merge the contents of multiple sets into a single one.

In my case I have some set<int>s which I would like to merge.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

又爬满兰若 2024-12-07 00:24:21

你可以这样做:

std::set<int> s1;
std::set<int> s2;
// fill your sets
s1.insert(s2.begin(), s2.end());

You can do something like:

std::set<int> s1;
std::set<int> s2;
// fill your sets
s1.insert(s2.begin(), s2.end());
呆° 2024-12-07 00:24:21

看起来您正在要求 std::set_union

示例:

#include <set>
#include <algorithm>

std::set<int> s1; 
std::set<int> s2; 
std::set<int> s3;

// Fill s1 and s2 

std::set_union(std::begin(s1), std::end(s1),
               std::begin(s2), std::end(s2),                  
               std::inserter(s3, std::begin(s3)));

// s3 now contains the union of s1 and s2

C++17/20 的更新(请参阅下面的评论)

此解决方案不是最理想的,因为 std::set 已经检查
插入时重复。最好使用 std::merge 代替
std::set_union 这样就不会在两个地方发生这种情况。

Looks like you are asking for std::set_union.

Example:

#include <set>
#include <algorithm>

std::set<int> s1; 
std::set<int> s2; 
std::set<int> s3;

// Fill s1 and s2 

std::set_union(std::begin(s1), std::end(s1),
               std::begin(s2), std::end(s2),                  
               std::inserter(s3, std::begin(s3)));

// s3 now contains the union of s1 and s2

UPDATE for C++17/20 (see comment below)

This solution is suboptimal because std::set already checks for
duplicates on insertion. It would be better to use std::merge instead
of std::set_union so that this doesn't happen in two places.

风流物 2024-12-07 00:24:21

使用 C++17,您可以使用 merge 函数直接设置

当您想要提取 set2 元素时,这会更好。作为合并的一部分插入到 set1 中。

就像下面这样:

set<int> set1{ 1, 2, 3 };
set<int> set2{ 1, 4, 5 };

// set1 has     1 2 3       set2 has     1 4 5
set1.merge(set2);
// set1 now has 1 2 3 4 5   set2 now has 1   (duplicates are left in the source, set2)

With C++17, you can use merge function of set directly.

This is better, when you want the set2 elements extracted & inserted into set1 as part of merging.

Like below:

set<int> set1{ 1, 2, 3 };
set<int> set2{ 1, 4, 5 };

// set1 has     1 2 3       set2 has     1 4 5
set1.merge(set2);
// set1 now has 1 2 3 4 5   set2 now has 1   (duplicates are left in the source, set2)
故人的歌 2024-12-07 00:24:21

看看 std::merge 可以为您做什么

cplusplus.com/reference/algorithm/merge

look what std::merge can do for you

cplusplus.com/reference/algorithm/merge

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文