Listing 1: The Internal Node Class

/**
 * The linked hash node holds the stored data, along with iterators into the 
 * internal hash map and list.
 */
template <class Key, class Data, class HashFcn, class EqualKey, class Alloc>
struct _linked_hash_node
{
   typedef _linked_hash_node<Key, Data, HashFcn, EqualKey, Alloc> _Node;
   typedef hash_map<Key, _Node*, HashFcn, EqualKey, 
	      	    typename Alloc::rebind<_Node*>::other> _Hash_Map;
   typedef typename _Hash_Map::iterator _Hash_Map_iterator;

   typedef list<_Node*, typename Alloc::rebind<_Node*>::other> _List;
   typedef typename _List::iterator _List_iterator;

   typedef pair<Key, Data> value_type;

   // The actual stored data
   value_type		_val;

   // An iterator into the hash map
   _Hash_Map_iterator	_hmi;

   // An iterator into the linked list
   _List_iterator	_li;

      // Constructor
   _linked_hash_node(const Key& __k,
	    	     const Data& __d, 
	    	     _Hash_Map_iterator __hmi,
		     _List_iterator __li)
      : _val(__k, __d), _hmi(__hmi), _li(__li) {}

   // Destructor
   ~_linked_hash_node(void) {}
};