Ersetzen Vektor und Hash-Tabelle mit Boost.Bimap
-
11-10-2019 - |
Frage
Ich suche eine vector<string>
und ein boost::unordered_map<string, size_t>
Mapping String-Indizes in den ehemaligen mit einem boost::bimap
zu ersetzen.
Was Instanziierung bimap
soll ich verwenden? Bisher hab ich kommen mit
typedef bimap<
unordered_set_of<size_t>,
vector_of<string>
> StringMap;
, aber ich bin nicht sicher, ob ich jetzt die Sammlung Typen umgekehrt haben. Außerdem frage ich mich, ob ich sollte die
Lösung Um eine bimap zwischen size_t bekommen und std :: string, wo Sie ~ konstant (bis auf die Kosten für Hashing und mögliche Kollisionen) Sie verwenden müssen unordered_set_of: Rückgabe: Die unordered_set ist eine Boost-Version des Satzes, die anstelle von Bäumen Hash-Tabellen verwendet, um die Elemente zu speichern, finden Sie unter Erhöhung Ungeordnete docs . Mit Blick auf die Kommentare von einem der bimap Beispiele unter Bimap Beispiel , haben wir: Die linke Kartenansicht funktioniert wie ein std :: unordered_map #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