• 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 ----------------

  • 相关阅读:
    几个新角色:数据科学家、数据分析师、数据(算法)工程师
    人类投资经理再也无法击败电脑的时代终将到来了...
    Action Results in Web API 2
    Multiple actions were found that match the request in Web Api
    Routing in ASP.NET Web API
    how to create an asp.net web api project in visual studio 2017
    网站漏洞扫描工具
    How does asp.net web api work?
    asp.net web api history and how does it work?
    What is the difference between a web API and a web service?
  • 原文地址:https://www.cnblogs.com/davidgu/p/5056593.html
Copyright © 2020-2023  润新知