zoukankan      html  css  js  c++  java
  • STL

    1. hash工具类

    hashval.hpp

    #ifndef _Core_HashVal_H_
    #define _Core_HashVal_H_
    
    #include <functional>
    
    // from boost (functional/hash):
    // see http://www.boost.org/doc/libs/1_35_0/doc/html/hash/combine.html
    template <typename T>
    inline void hash_combine (std::size_t& seed, const T& val)
    {
        seed ^= std::hash<T>()(val) + 0x9e3779b9 + (seed<<6) + (seed>>2);
    }
    
    // auxiliary generic functions to create a hash value using a seed
    template <typename T>
    inline void hash_val (std::size_t& seed, const T& val)
    {
        hash_combine(seed,val);
    }
    template <typename T, typename... Types>
    inline void hash_val (std::size_t& seed,
                          const T& val, const Types&... args)
    {
        hash_combine(seed,val);
        hash_val(seed,args...);
    }
    
    // auxiliary generic function to create a hash value out of a heterogeneous list of arguments
    template <typename... Types>
    inline std::size_t hash_val (const Types&... args)
    {
        std::size_t seed = 0;
        hash_val (seed, args...);
        return seed;
    }
    
    #endif

    2. UnorderedSetTest.cpp

    #include <unordered_set>
    #include "../../Core/print.hpp"
    #include "UnorderedSetTest.h"
    #include "../../Core/hashval.hpp"
    #include "../../Domain/Models/Customer.h"
    #include "../../Domain/Models/CustomerHash.h"
    #include "../../Domain/Models/CustomerEqual.h"
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    void UnorderedSetTest::simpleHashFunc()
    {
        // unordered set with own hash function and equivalence criterion
        unordered_set<Customer, CustomerHash, CustomerEqual> custset;
    
        custset.insert(Customer("arne", "wink", 70));
        custset.insert(Customer("peter", "zhang", 70));
        PRINT_ELEMENTS(custset);
        
        Customer cust = Customer("arne", "wink", 70);
        if (custset.find(cust) != custset.end())
        {
            cout << "Customer: " << cust << " found!" << endl;
        }
        else
        {
            cout << "Customer: " << cust << " not exists!" << endl;
        }
    
        Customer cust2 = Customer("arne", "wink2", 70);
        if (custset.find(cust2) != custset.end())
        {
            cout << "Customer: " << cust2 << " found!" << endl;
        }
        else
        {
            cout << "Customer: " << cust2 << " not exists!" << endl;
        }
    }
    
    void UnorderedSetTest::run()
    {
        printStart("simpleHashFunc()");
        simpleHashFunc();
        printEnd("simpleHashFunc()");
    }

    3. 运行结果:

    ---------------- simpleHashFunc(): Run Start ----------------
    [arne,wink,70] [peter,zhang,70]
    Customer: [arne,wink,70] found!
    Customer: [arne,wink2,70] not exists!
    ---------------- simpleHashFunc(): Run End ----------------

  • 相关阅读:
    flex兼容写法
    多行文字,最后一行省略号(适用于移动端)
    checkbox样式修改
    响应式布局
    微信常用的页面跳转
    css小技巧(清除滚动条)
    JS学习---PHP浅识
    qml 画页迁移
    list滚动条Scroll 偏移和长度计算公式总结
    qml listview关键字高亮
  • 原文地址:https://www.cnblogs.com/davidgu/p/5056593.html
Copyright © 2011-2022 走看看