#include <iostream>
#include <unordered_map>
#include <utility>
// Custom hash function for std::pair<int, int>
struct PairHash {
size_t operator()(const std::pair<int, int>& p) const {
// Combine the hashes of the two integers
size_t hash1 = std::hash<int>{}(p.first);
size_t hash2 = std::hash<int>{}(p.second);
// A simple way to combine the hashes is to XOR them
return hash1 ^ (hash2 << 1); // Shifting hash2 to avoid collisions when both integers are the same
}
};
int main() {
std::unordered_map<std::pair<int, int>, int, PairHash> myMap;
// Inserting values
myMap[std::make_pair(1, 2)] = 5;
myMap[std::make_pair(3, 4)] = 10;
// Accessing values
std::cout << "Value of (1, 2): " << myMap[std::make_pair(1, 2)] << std::endl;
std::cout << "Value of (3, 4): " << myMap[std::make_pair(3, 4)] << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPHV0aWxpdHk+CgovLyBDdXN0b20gaGFzaCBmdW5jdGlvbiBmb3Igc3RkOjpwYWlyPGludCwgaW50PgpzdHJ1Y3QgUGFpckhhc2ggewogICAgc2l6ZV90IG9wZXJhdG9yKCkoY29uc3Qgc3RkOjpwYWlyPGludCwgaW50PiYgcCkgY29uc3QgewogICAgICAgIC8vIENvbWJpbmUgdGhlIGhhc2hlcyBvZiB0aGUgdHdvIGludGVnZXJzCiAgICAgICAgc2l6ZV90IGhhc2gxID0gc3RkOjpoYXNoPGludD57fShwLmZpcnN0KTsKICAgICAgICBzaXplX3QgaGFzaDIgPSBzdGQ6Omhhc2g8aW50Pnt9KHAuc2Vjb25kKTsKICAgICAgICAvLyBBIHNpbXBsZSB3YXkgdG8gY29tYmluZSB0aGUgaGFzaGVzIGlzIHRvIFhPUiB0aGVtCiAgICAgICAgcmV0dXJuIGhhc2gxIF4gKGhhc2gyIDw8IDEpOyAvLyBTaGlmdGluZyBoYXNoMiB0byBhdm9pZCBjb2xsaXNpb25zIHdoZW4gYm90aCBpbnRlZ2VycyBhcmUgdGhlIHNhbWUKICAgIH0KfTsKCmludCBtYWluKCkgewogICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6cGFpcjxpbnQsIGludD4sIGludCwgUGFpckhhc2g+IG15TWFwOwoKICAgIC8vIEluc2VydGluZyB2YWx1ZXMKICAgIG15TWFwW3N0ZDo6bWFrZV9wYWlyKDEsIDIpXSA9IDU7CiAgICBteU1hcFtzdGQ6Om1ha2VfcGFpcigzLCA0KV0gPSAxMDsKCiAgICAvLyBBY2Nlc3NpbmcgdmFsdWVzCiAgICBzdGQ6OmNvdXQgPDwgIlZhbHVlIG9mICgxLCAyKTogIiA8PCBteU1hcFtzdGQ6Om1ha2VfcGFpcigxLCAyKV0gPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICJWYWx1ZSBvZiAoMywgNCk6ICIgPDwgbXlNYXBbc3RkOjptYWtlX3BhaXIoMywgNCldIDw8IHN0ZDo6ZW5kbDsKCiAgICByZXR1cm4gMDsKfQo=