C++ examples for STL:unordered_set
Using an unordered_set
#include <cinttypes> #include <functional> #include <iostream> #include <string> #include <unordered_set> using namespace std; class SetObject;/*w w w. j a v a 2 s . co m*/ namespace std { template <> class hash<SetObject> { public: template <typename... Args> size_t operator()(Args&&... setObject) const { return hash<string>()((forward<Args...>(setObject...)).GetName()); } }; } class SetObject { private: string m_Name; size_t m_Hash{}; public: SetObject(const string& name) : m_Name{ name } , m_Hash{ hash<SetObject>()(*this) } { } const string& GetName() const { return m_Name; } const size_t& GetHash() const { return m_Hash; } bool operator==(const SetObject& other) const { return m_Hash == other.m_Hash; } }; int main(int argv, char* argc[]) { unordered_set<SetObject> mySet; mySet.emplace("Five"); mySet.emplace("Three"); mySet.emplace("Four"); mySet.emplace("One"); mySet.emplace("Two"); cout << showbase << hex; for (auto&& number : mySet) { cout << number.GetName() << " - " << number.GetHash() << endl; } auto iter = mySet.find({ "Three" }); if (iter != mySet.end()) { cout << "Found: " << iter->GetName() << " with hash: " << iter->GetHash() << endl; } return 0; }