【发布时间】:2020-12-19 07:07:37
【问题描述】:
我有 3 套 A、B、C。我需要找到 并集(intersection(A,B),intersection(B,C),intersection(A,C))
(A ∩ B) ∪ (B ∩ C) ∪ (A ∩ C) 在集合记法中。
是否可以将其转换为代码而不需要再声明4个集合。
#include <set>
using namespace std;
set<int> set1, set2, set3;
set1.insert(1);
set1.insert(2);
set2.insert(2);
set2.insert(3);
set3.insert(1);
set3.insert(4);
// set1 = {1,2} , set2 = {2,3}, set3 = {1,4}
这里是使用 set_intersection() 和 set_union() 的正常方式
set<int> res1, res2,res3;
set_intersection(set1.begin(), set1.end(), set2.begin(), set2.end(), inserter(res1,res1.begin()));
set_intersection(set2.begin(), set2.end(), set3.begin(), set3.end(), inserter(res2,res2.begin()));
set_intersection(set1.begin(), set1.end(), set3.begin(), set3.end(), inserter(res3,res3.begin()));
set<int> result;
set_union(res1.begin(), res1.end(), res2.begin(), res2.end(), inserter(result, result.begin())
.
.
.
我想知道是否有更优雅的方式来代替它。有谁能给我一些建议吗?
【问题讨论】:
-
你可以定义你的
class包含一些std::set<int> setfield;成员...阅读a good C++ programming book,然后this C+ reference,然后是你的C++编译器的文档(例如GCC...) ,然后是调试器的文档(例如GDB)。从 FLTK 或 RefPerSys 等现有开源项目中汲取灵感 -
写自己的函数算不算“更优雅”?将工具用于超出其设计的目的时,遇到一些尴尬并不奇怪。