C++でunordered_setを使用して2つの変数を保存する方法は何ですか。
C++のunordered_setは、一意な要素を保存するための非順序のコンテナです。要素の型は、2つの変数を保存する自作の型を含む、任意のユーザー定義型を保存できます。
unordered_setの要素として、独自の構造体やクラスを使用して、2つの変数を保持する方法があります。以下は、独自の構造体を使用した例です:
#include <iostream>
#include <unordered_set>
struct MyPair {
int x;
int y;
};
struct MyPairHash {
size_t operator()(const MyPair& pair) const {
return std::hash<int>()(pair.x) ^ std::hash<int>()(pair.y);
}
};
struct MyPairEqual {
bool operator()(const MyPair& lhs, const MyPair& rhs) const {
return lhs.x == rhs.x && lhs.y == rhs.y;
}
};
int main() {
std::unordered_set<MyPair, MyPairHash, MyPairEqual> mySet;
mySet.insert({1, 2});
mySet.insert({3, 4});
mySet.insert({1, 2}); // 重复的元素不会被插入
for (const auto& pair : mySet) {
std::cout << pair.x << ", " << pair.y << std::endl;
}
return 0;
}
上記の例では、MyPairは2つの整数型メンバ変数xとyを含むカスタム構造体です。MyPairHashは、MyPair型のハッシュ値を計算するためのカスタムハッシュ関数です。MyPairEqualは、MyPair型の要素が等しいかどうかを判断するためのカスタム等値比較関数です。
main関数で、unordered_setオブジェクトのmySetを作成し、insert関数を使用していくつかのMyPair型の要素を挿入しました。重複した要素は挿入されませんので、unordered_setの要素は一意であることに注意してください。
最後に、forループを使用してmySetを反復処理し、各MyPair型の要素のメンバ変数xとyの値を出力します。
MyPair構造体のメンバ変数やハッシュ関数、等価比較関数を、自分のニーズに合わせてカスタマイズすることができます。