STL - Unorderedset - 自定义哈希函数
生活随笔
收集整理的這篇文章主要介紹了
STL - Unorderedset - 自定义哈希函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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 criterionunordered_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 ----------------
總結
以上是生活随笔為你收集整理的STL - Unorderedset - 自定义哈希函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的世界阳光传感器怎么用
- 下一篇: 设计模式的征途—2.简单工厂(Simpl