Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef HASH_EXTENDED_H
- #define HASH_EXTENDED_H
- #include <unordered_map>
- #include <unordered_set>
- #include <algorithm>
- namespace std {
- template<typename T> struct hash<vector<T>> {
- inline size_t operator() (const vector<T>& vec) const {
- hash<T> hasher;
- size_t seed = 0;
- for (auto& i : vec) {
- seed ^= hasher(i) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
- }
- return seed;
- }
- };
- template<typename T> struct hash<unordered_multiset<T>> {
- inline size_t operator() (const unordered_multiset<T>& uset) const {
- hash<T> hasher;
- vector<size_t> hashes;
- for (auto& i : uset) {
- hashes.push_back(hasher(i));
- }
- sort(hashes.begin(), hashes.end());
- hash<vector<size_t>> h;
- return h(hashes);
- }
- };
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement