我知道STL具有set_difference,但我只需要知道2 sets是否不相交即可。我已经配置了我的代码,这使我的应用程序运行速度大大降低。有没有一种简单的方法来查看2个集合是否不相交,还是我只需要滚动自己的代码?
set_difference
set
编辑:我也尝试过,set_intersection但花了相同的时间…
set_intersection
修改了hjhill的代码,以通过消除count()调用将复杂度降低O(log n)。
template<class Set1, class Set2> bool is_disjoint(const Set1 &set1, const Set2 &set2) { if(set1.empty() || set2.empty()) return true; typename Set1::const_iterator it1 = set1.begin(), it1End = set1.end(); typename Set2::const_iterator it2 = set2.begin(), it2End = set2.end(); if(*it1 > *set2.rbegin() || *it2 > *set1.rbegin()) return true; while(it1 != it1End && it2 != it2End) { if(*it1 == *it2) return false; if(*it1 < *it2) { it1++; } else { it2++; } } return true; }
我已经编译并测试了此代码,因此它应该很好。