Как создать unordered_map пар в C ++?
Неупорядоченная карта не содержит хэш-функции для пары, как для int, string и т. Д., Поэтому, если мы хотим хешировать пару, мы должны явно предоставить ей хеш-функцию, которая может хешировать пару. unordered_map может принимать до 5 аргументов:
- Ключ: тип пары "ключ-значение"
- Значение: тип значения, которое будет сохранено для ключа.
- Хеш-функция: функция, которая используется для хеширования данного ключа. Если не указано иное, используется хеш-функция по умолчанию.
- Pred: функция, которая используется для того, чтобы никакие два ключа не могли иметь одинаковые хэш-значения.
- Распределить: объект, используемый для определения модели памяти для карты.
hash_function может быть любым, учитывая, что он может хешировать данный ключ.
Предпосылка: как создать unordered_map определенного пользователем класса?
// CPP program to demonstrate implementation of // unordered_map for a pair. #include <bits/stdc++.h> using namespace std; // A hash function used to hash a pair of any kind struct hash_pair { template < class T1, class T2> size_t operator()( const pair<T1, T2>& p) const { auto hash1 = hash<T1>{}(p.first); auto hash2 = hash<T2>{}(p.second); return hash1 ^ hash2; } }; int main() { // Sending the hash function as a third argument unordered_map<pair< int , int >, bool , hash_pair> um; // Creating some pairs to be used as keys pair< int , int > p1(1000, 2000); pair< int , int > p2(2000, 3000); pair< int , int > p3(2005, 3005); // Inserting values in the unordered_map. um[p1] = true ; um[p2] = false ; um[p3] = true ; cout << "Contents of the unordered_map :
" ; for ( auto p : um) cout << "[" << (p.first).first << ", " << (p.first).second << "] ==> " << p.second << "
" ; return 0; } |
Содержимое unordered_map: [1000, 2000] ==> 1 [2005, 3005] ==> 1 [2000, 3000] ==> 0
Примечание: мы можем создать карту для пары. Посмотрите карту пары. Причина в том, что карта основана на самобалансирующихся BST и не требует хэш-функции.
Задача упражнения: Нихил - коммивояжер, и сегодня он посещает дома в новом районе, чтобы продавать энциклопедии. Новый город находится в начале сетки x * y (1 <= x <= 10 ^ 9, 1 <= y <= 10 ^ 9), и на каждом перекрестке есть дом. Теперь он не очень хорошо запоминает дома, которые он уже посетил, поэтому всякий раз, когда он входит в дом, он сообщает вам координаты дома. Ваша задача - запомнить координаты и в конце дня рассказать ему обо всех домах, которые он посетил в тот день.
Примеры:
Input :
Enter the number of houses that he visited today :5
Enter the coordinate of HouseNo. 1 :1000 12985
Enter the coordinate of HouseNo. 2 :12548 25621
Enter the coordinate of HouseNo. 3 :14586 26481
Enter the coordinate of HouseNo. 4 :12 63
Enter the coordinate of HouseNo. 5 :14689 36945
Output :
Houses that he visited today:
12 63
14689 36945
14586 26481
1000 12985
12548 25621