私はこのような2つの比較をします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
質問:
これは正しい方法でしょうか? それとも、2 つのセットを比較する他の (特別な) 方法があるのでしょうか?
ベストアンサー1
はい、operator==
すべての標準コンテナに対して正しく定義されています(を除外する順序付けされていないコンテナ(標準の23.2.5.2に基づく)を比較し、通常は辞書式の比較を行います。例えば、ここ関連する引用:
lhs と rhs の内容が等しいかどうか、つまり lhs.size() == rhs.size() であり、lhs の各要素が同じ位置に rhs 内の同等の要素を持つかどうかを確認します。
は順序付けられたコンテナーであるためstd::set
、同じサイズと同じ要素 (比較子が同じである場合) を持つセットは、必然的に同じ位置に配置され、したがって等しいと比較されます。