c++ - 确定多个集合中的唯一值

标签 c++ set

在这个项目中,有多个sets其中它们包含 1 - 9 的值。在此范围内,我需要有效地确定一个 set 中是否存在唯一值。但不是其他人。

例如:

std::set<int> s_1 = { 1, 2, 3, 4, 5 };
std::set<int> s_2 = { 2, 3, 4 };
std::set<int> s_3 = { 2, 3, 4, 6 };

注意:sets的个数在 runtime 之前是未知的.

如您所见,s_1包含 1 的唯一值和 5s_3包含 6 的唯一值.

确定唯一值后,上述sets然后应该只包含唯一值 like:

// s_1 { 1, 5 }
// s_2 { 2, 3, 4 }
// s_3 { 6 }

到目前为止我尝试的是 loop通过所有sets并记录 countnumbers已经出现了。但是我想知道是否有更有效的解决方案。

最佳答案

标准 C++ 库中有标准算法,用于对 2 个集合进行交集、差分和并集运算。

如果我很清楚你的问题,你可以这样做: 对所有集合(在循环中)进行交集以确定基数,然后在每个集合和基数之间应用差异? 您可以根据您当前的实现对此进行基准测试。应该更快。

查看此答案。

Getting Union, Intersection, or Difference of Sets in C++

编辑:cf Tony D. 评论:您基本上可以使用 std::bitset<> 执行相同的操作。和二元运算符(& | 等),它们应该更快。 根据您输入的实际大小,可能值得一试。

关于c++ - 确定多个集合中的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28062758/

相关文章:

c++ - 带有标准容器的 std::shared_ptr

c++ - 设置 SO_RCVBUF 会减小窗口缩放因子

c++ - 为什么在我的 Apache 2.2 模块中调用 ap_hook_type_checker 函数时 request_rec::filename NULL?

c++ - Visual Studio 2015 中的 "non-standard syntax; use ' 和 ' to create a pointer to member"错误

c++ - arm-none-eabi-g++:没有这样的文件或目录

c++ - 创建分类音乐库的有效方法

algorithm - 如何找到计算时间小于 O(n) 的以下类型的集合?

c++ - 如何通过覆盖执行 boost::filesystem copy_file

c++ - 是否有支持 insert() 等的 sorted_vector 类?

haskell - 具有给定顺序的无序数据类型集