我在比较两个 std::set
。
#include <cstdlib>
#include <cstdio>
using namespace std;
#include <vector>
#include <set>
int main(int argc, char** argv)
{
int myints1[]= {10,20,30,40,50};
int myints2[]= {50,40,30,20,10};
std::set<int> s1 (myints1,myints1+5);
std::set<int> s2(myints2,myints2+5);
if(s1==s2){
printf("sets: true");
}else printf("sets: false");
std::set<int>::iterator it2=s2.begin();
for(std::set<int>::iterator it1=s1.begin();it1!=s1.end();it1++){
printf("\ns1: %d s2: %d",*it1,*it2);
it2++;
}
}
输出:
sets: true
s1: 10 s2: 10
s1: 20 s2: 20
s1: 30 s2: 30
s1: 40 s2: 40
s1: 50 s2: 50
问题:
这样做是正确的吗?还有没有其他(特别的)比较两个集合的方法?
std::set
实现了operator==
,我会期望它是正确的。 - Mark Ransoms1
和s2
没有共同点的方法,您可能需要查看<algorithm>
头文件中的std::set_symmetric_difference
函数。 - jogojapanstd::set
是否实现了==
(http://www.cplusplus.com/reference/set/set/)。如果你有一些对象(没有重载`==`),而不是`int`,我不确定你是否会得到相同的结果。 - Bill