Заменить вектор и хэш -таблицу Boost.bimap
-
11-10-2019 - |
Вопрос
Я хочу заменить vector<string>
и boost::unordered_map<string, size_t>
картирование строки с индексами в первом boost::bimap
.
Что экземпляр bimap
я должен использовать? Пока что я придумал
typedef bimap<
unordered_set_of<size_t>,
vector_of<string>
> StringMap;
Но я не уверен, что сейчас я изменил типы коллекций. Кроме того, мне интересно, должен ли я изменить Коллекция типа отношений. Анкет Будет а vector_of_relation
быть моим лучшим выбором или set_of_relation
, или просто пойти с дефолтом?
Решение
Чтобы получить бимап между size_t и std :: string, где у вас есть постоянная (до стоимости хеширования и любых потенциальных столкновений) вам нужно использовать Unoromeded_set_of:
#include <boost/bimap.hpp>
#include <boost/bimap/unordered_set_of.hpp>
#include <string>
#include <iostream>
#include <typeinfo>
int main(int argc, char* argv[]) {
typedef boost::bimap< boost::bimaps::unordered_set_of<size_t>, boost::bimaps::unordered_set_of<std::string> > StringMap;
StringMap map;
map.insert(StringMap::value_type(1,std::string("Cheese")));
map.insert(StringMap::value_type(2,std::string("Cheese2")));
typedef StringMap::left_map::const_iterator const_iter_type;
const const_iter_type end = map.left.end();
for ( const_iter_type iter = map.left.begin(); iter != end; iter++ ) {
std::cout << iter->first << " " << map.left.at(iter->first) << "\n";
}
}
Возвращает:
1 Cheese
2 Cheese2
Неупорядоченный_SET - это усилительная версия набора, которая использует хэш -таблицы вместо деревьев для хранения элементов, см. Повысить неупорядоченные документы.
Глядя на комментарии одного из примеров BIMAP на Пример BIMAP, у нас есть:
Просмотр левой карты работает как std :: Unoromeded_map <std :: string, long>, учитывая название страны, мы можем использовать ее для поиска населения в постоянное время