Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
map<string, int> у нас затык. if(some_condition)
{
static EventType::Type some_type = EventType::find("some_id");
events.push_pack(some_type);
}
Но опять же если это высоконагруженная часть программы то поиск по map может быть достаточно долгим, хэши могут дать колизии чего совсем не хочется.
std::map<std::string, Script> _events;std::hash_map<std::string, Script> _events;std::unordered_map<std::string, Script> _events;
- #include <string>
- #include <unordered_map>
- #include <tuple>
- #include <iostream>
- struct Script { int Dummy; Script(int dummy = 0) { Dummy = dummy; } };
- typedef const std::pair<const std::string, const size_t> descriptor;
- struct descriptor_hasher
- {
- size_t operator()(const descriptor& desc) const { return desc.second; };
- };
- descriptor make_descriptor(std::string arg)
- {
- auto hash = std::hash<std::string>()(arg);
- return std::make_pair(std::move(arg), hash);
- }
- int main(int argc, const char * argv[])
- {
- std::unordered_map<descriptor, Script, descriptor_hasher> hash_map;
- static const descriptor event_descriptor = make_descriptor("test");
- // insert
- hash_map[event_descriptor] = Script(42);
- // get
- auto it = hash_map.find(event_descriptor);
- std::cout << it->second.Dummy << std::endl;
- }
Быстрый доступ к map по ключу строке