1. hash工具类
hashval.hpp
#ifndef _Core_HashVal_H_#define _Core_HashVal_H_#include// from boost (functional/hash):// see http://www.boost.org/doc/libs/1_35_0/doc/html/hash/combine.htmltemplate inline void hash_combine (std::size_t& seed, const T& val){ seed ^= std::hash ()(val) + 0x9e3779b9 + (seed<<6) + (seed>>2);}// auxiliary generic functions to create a hash value using a seedtemplate inline void hash_val (std::size_t& seed, const T& val){ hash_combine(seed,val);}template 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 argumentstemplate 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#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 #include using namespace std;void UnorderedSetTest::simpleHashFunc(){ // unordered set with own hash function and equivalence criterion unordered_set 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 ----------------