如何在 C++ 中打印剩余的一组数字?

How to print the remaining set of numbers in C++?

假设有一个集合 U = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 我创建了一个 C++ 程序并且我,使用一些逻辑打印数字 { 1, 3, 6, 7, 9}(我们称之为集合 A),所以剩下的数字是 {2, 4, 5, 8, 1}(暂且称之为集合 B)

U = A + B

有没有直接打印出 B 组数字 (B = U - A) 的方法? (实际上并没有颠倒我打印 A 组数字的逻辑)

就像如果我打印偶数,那么剩下的就是奇数,我可以很容易地编写代码来显示奇数。但我想问是否有另一种“直接”的方式来做到这一点?

类似地,如果我打印 1-100 之间的所有质数,那么我可以反转逻辑并打印未打印的数字(此处为非质数),但我并不是要求这样做,我问有没有直接的方法来打印剩余的一组数字?

PS: 我只会基本的C++,我还没有开始DSA(数据结构和算法)仍然欢迎任何水平的答案,我会努力解释它:)

每当您听到“查找缺失元素”或“查找重复元素”类型的问题时,您应该立即想到“哈希 table”。在 Internet 上搜索 Hash Table,但 wikipedia article 具有基础知识。

std::unordered_mapstd::unordered_set 是 C++ 中的集合 类,它们传统上基于散列 tables.

给定一个集合U:

unordered_set<int> U = { 1,2,3,4,5,6,7,8,9,10 };

作为 U 的子集的集合 A:

unordered_set<int> A = { 1,3,5,7,9 };

那么B = U - A可以计算为

unordered_set<int> B;
for (int u  : U)               // for each item u in set U
{
    if (A.find(u) == A.end())  // if u is not in "A"
    {
        B.insert(u);           // add it to "B".
    }
}

for (int b : B)
{
    cout << b << endl;
}

如果您需要对输出进行排序,请将 B 的声明从 std::unordered_set 更改为 std::set.