Advertisement
Guest User

Untitled

a guest
May 29th, 2016
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.89 KB | None | 0 0
  1. #ifndef HASH_EXTENDED_H
  2. #define HASH_EXTENDED_H
  3.  
  4. #include <unordered_map>
  5. #include <unordered_set>
  6. #include <algorithm>
  7.  
  8. namespace std {
  9. template<typename T> struct hash<vector<T>> {
  10. inline size_t operator() (const vector<T>& vec) const {
  11. hash<T> hasher;
  12. size_t seed = 0;
  13. for (auto& i : vec) {
  14. seed ^= hasher(i) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
  15. }
  16. return seed;
  17. }
  18. };
  19.  
  20. template<typename T> struct hash<unordered_multiset<T>> {
  21. inline size_t operator() (const unordered_multiset<T>& uset) const {
  22. hash<T> hasher;
  23. vector<size_t> hashes;
  24. for (auto& i : uset) {
  25. hashes.push_back(hasher(i));
  26. }
  27. sort(hashes.begin(), hashes.end());
  28. hash<vector<size_t>> h;
  29.  
  30. return h(hashes);
  31. }
  32. };
  33. }
  34.  
  35. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement