Smart pointers as unorderd_map key and compare them by reference : I need `unorderd_map` which will compare elements by reference. I tried to do this by inserting smart pointers as a key (since I do not want to use row pointers) and I implemented `Equal` to compare underlying references of smart pointers. However, the map is not able to find elements correctly.

	#include <memory>
	#include <unordered_map>
	#include <iostream>
	using namespace std;

	class Node {};

	typedef shared_ptr<Node> NodePtr;

	struct HashFunction {
		unsigned long operator()(const NodePtr& key) const{
			return (unsigned long)key.get();
		}
	};

	struct EqualFunction {
		bool operator()(const NodePtr& t1, const NodePtr& t2) const {
			return t1.get() == t2.get();
		}
	};

	class Map
	{
		unordered_map<NodePtr, int, HashFunction, EqualFunction> map;
	public:	
		void insert(NodePtr nodeToInsert, int val) {
			map.insert({nodeToInsert, val });
		}

		bool exist(NodePtr node) {
			if (map.find(node) == map.end()) return false;
			return true;
		}
	};

	int main()
	{
		Node node; Map map;
		auto nodePtr = make_shared<Node>(node);
		map.insert(nodePtr, 1);
		auto ptrToSameNode = make_shared<Node>(node);
		if (map.exist(ptrToSameNode)) 
            cout << "Node exists.";
		    else cout << "Node doesn't exist.";
	}

Above code print "Node doesn't exist" even through I am searching for the same node.