c++ - 对无序集执行 set_difference

标签 c++ stl

set_difference算法需要以下内容

The elements in the ranges shall already be ordered according to this same criterion

哈希表不是这种情况。

我正在考虑根据 std::remove_copy 实现集合差异 A-B,其中删除标准是集合 B 中存在 A 的元素。

是否有一种标准、有效、最快、最安全的方法来做到这一点?

最佳答案

如果您有两个哈希表,最有效的方法应该是遍历其中一个,在另一个哈希表中查找每个元素。然后将找不到的那些插入第三个容器中。粗略的草图可能如下所示:

std::vector<int> result;
std::copy_if(lhs.begin(), lhs.end(), std::back_inserter(result),
    [&rhs] (int needle) { return rhs.find(needle) == rhs.end(); });

关于c++ - 对无序集执行 set_difference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22710331/

相关文章:

c++ - 匿名 union 是否可以接受用于别名结构中的成员变量?

c++ - 在全屏模式下设置控制台字体大小

c++ - 如何让 : map<T, vector<iterator to map itself>>?

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

c++ - Golang 将数组传递给函数并修改它

c++ - 尝试连接到 google-cloud 中的 MariaDB 数据库但无法连接不显示任何错误报告

c++ - 一种解决 Qt 应用程序大小的方法

c++ - vector 迭代器的增量/减量

c++ - coredump:读取文件内容到 std::string

c++ - 从 C++(大量使用 STL)切换到 C 来构建解释器