When I Wanted to add an std::unordered_set to CGUI, I noticed it currently uses boost::unordered_set.
Wondering why it uses that and not std::unordered_set, I saw that the boost one was the predecessor and that it later (C++11) got added to std.
So it's basically historical ballast (it has negative weight since it requires another library dependency and mixing boost and std variants is confusing).
boost::unordered_set uses hash_value function, std::unordered_set uses a std::hash<T> class with an operator() function, otherwise the syntax and semantics are the same.
The replacement also drops std::unary_function which is marked as deprecated in C++11 and dropped in C++17.
https://en.cppreference.com/w/cpp/utility/functional/unary_function
This diff also drops the boost hash_combine function to avoid the lib dependency only for this function, to increase cohesiveness of the affected codebase,
and since the function is only seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);.
https://www.boost.org/doc/libs/1_55_0/doc/html/hash/reference.html#boost.hash_combine
While at it, alphabetically sort the includes of the affected files and replace most typedef with using.