zoukankan      html  css  js  c++  java
  • set, unordered_set模板类

    template<
        class Key,
        class Hash = std::hash<Key>,
        class KeyEqual = std::equal_to<Key>,
        class Allocator = std::allocator<Key>
    > class unordered_set;
    抽时间实现上述哈希表的简易模板。
    =======================================================================================================================

    std::unordered_set<std::pair<int, int>> S;

    以上的声明是无法通过编译的。unordered_set的模板类声明如下。一般情况下,我们只需声明Key即可, Hash, KetEqual等会自动推导出来。

    template<
        class Key,
        class Hash = std::hash<Key>,
        class KeyEqual = std::equal_to<Key>,
        class Allocator = std::allocator<Key>
    > class unordered_set;

    很遗憾的是,标准库中并没有实现std::hash<std::pair<class T1, classT2>>. 可参考网页链接Hash模板

    我们需要手动实现std::hash<std::pair<class T1, classT2>>., 而KeyEqual与Allocator无需手动实现。

    unordered_set/unordered_map会保证容器内任意两元素x, y, equal_to(x, y)为false.

    而set模板类声明如下。

    template<
        class Key,
        class Compare = std::less<Key>,
        class Allocator = std::allocator<Key>
    > class set;

    set/map会保证容器内任意两元素x, y, std::less<Key>(x, y), std::less<Key>(y, x)一个为True,一个为False。

    namespace std {
        template<typename T1, typename T2>
        struct hash<std::pair<T1, T2>> {
            std::size_t operator() (const std::pair<T1, T2> &a) const {
                return 0;
            }
        };
        
        template<typename T1, typename T2>
        struct equal_to<std::pair<T1, T2>> {
            bool operator()( const std::pair<T1, T2>& lhs, const std::pair<T1, T2>& rhs ) const {
                return 0;
            }
        };
        
        template<typename T1, typename T2>
        struct less<std::pair<T1, T2>> {
            bool operator()( const std::pair<T1, T2>& lhs, const std::pair<T1, T2>& rhs ) const {
                return 0;
            }
        };
    };
  • 相关阅读:
    团队冲刺第四天
    团队冲刺第三天
    团队冲刺第二天
    团队冲刺第一天
    全球疫情地图显示
    团队博客——keep running视频+PPT介绍
    周总结7
    人月神话阅读笔记03
    Java枚举类型的使用,数值的二进制表示
    四则运算器
  • 原文地址:https://www.cnblogs.com/dirge/p/9515323.html
Copyright © 2011-2022 走看看