unordered_map
を作成します。ここで、キーは2つの整数の組み合わせです。マップルックアップのために順序付けられていないキーの組み合わせを使用する
#include <unordered_set>
#include <unordered_map>
using namespace std;
int main()
{
unordered_set<int> key_set1 = {21, 42};
unordered_map<unordered_set<int>, char> map;
map[key_set1] = 'a';
...
unordered_set<int> key_set2 = {42, 21};
if(map[key_set2] == map[key_set2])
success();
}
それはハッシュ関数といくつかの問題のように見える、コンパイル時の場合:
error: no match for call to ‘(const std::hash<std::unordered_set<int> >) (const std::unordered_set<int>&)’
noexcept(declval<const _Hash&>()(declval<const _Key&>()))>
どのように比較する際のキー値の順序は無視されなければならないとして、私はこのようなキーとしてunordered_set
を使用するのではと思いました私はこれを解決することはできますか?または、より良い方法/データ構造がありますか?
おそらくstd :: pair of intsが必要ですが、このためにハッシュを追加する必要があります。または、あなたのキーを64ビットintに変更し、2 intを1 64 bit intに結合してください – paulm
ここでキーとして 'set'を使うと、あなたのプログラムを遅くする以外の目的はありません。 –
目的は、キー値を順序付けできないことです。だから、私の答えの比較は真実だろう。 – Corbie