std::tr1::unordered_map, __gnu_cxx::hash_map and std::map with Boehm GC on Mosh

hash_func と equal_to と allocator を指定する例がほとんど見あたらなかったのでここに残す。
Mosh では __gnu_cxx::hash_map が 10% ほど残り2つと比べて速かった。

#ifdef USE_GNU_CXX_HASH_MAP
#include <tr1/unordered_map>
#include <ext/hash_map>
struct hash_func
{
    size_t operator()(scheme::Object const & s) const
    {
            return std::tr1::hash<word>()(s.val);
    }
};
typedef __gnu_cxx::hash_map<scheme::Object,
                            scheme::Object,
                            hash_func,
                            std::equal_to<scheme::Object>,
                            gc_allocator<std::pair<const scheme::Object, scheme::Object> > > ObjectMap;

#elif defined(USE_TR1_UNORDERED_MAP)

#include <tr1/unordered_map>
struct hash_func
{
    size_t operator()(scheme::Object const & s) const
    {
        return std::tr1::hash<word>()(s.val);
    }
};

typedef std::tr1::unordered_map<scheme::Object,
                                scheme::Object,
                                hash_func, std::equal_to<scheme::Object>,
                                gc_allocator<std::pair<const scheme::Object, scheme::Object> > > ObjectMap;

#else // std::map
typedef std::map<scheme::Object,
                 scheme::Object,
                 std::less<scheme::Object>,
                 gc_allocator<std::pair<const scheme::Object, scheme::Object> > > ObjectMap;
#endif