这是我的代码,想知道让它更快的方法吗?我的实现是蛮力,对于a中的任何元素,请尝试查找它是否也在b中,如果是的话,则放入结果集c。任何更聪明的想法都会受到赞赏。
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_set<int> a = {1,2,3,4,5};
std::unordered_set<int> b = {3,4,5,6,7};
std::unordered_set<int> c;
for (auto i = a.begin(); i != a.end(); i++) {
if (b.find(*i) != b.end()) c.insert(*i);
}
for (int v : c) {
std::printf("%d \n", v);
}
}发布于 2017-12-20 08:20:01
渐近来说,你的算法是它所能得到的最好的。
在实践中,我会添加一个检查来循环这两个集合中较小的集合,并在较大的集合中进行查找。假定合理分布的散列,std::unoredered_set中的查找需要恒定的时间。因此,这样,您将执行较少这样的查找。
https://stackoverflow.com/questions/47901339
复制相似问题