23 listopada 2012

Boost.Bimap

Szybkie wprowadzanie do bimapy: http://www.boost.org/doc/libs/1_42_0/libs/bimap/doc/html/boost_bimap/one_minute_tutorial.html
Bimap-a mapuje jeden klucz na drugi. W mapach klucze muszą być niepowtarzalne, bimapach każdy występujący w nich klucz i wartość musi być niepowtarzalny (wartość też jest kluczem).
#include <iostream>
#include <boost/bimap.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/foreach.hpp>

using namespace std;

template <typename T>
void show(T m)
{
    for (typename T::iterator it = m.begin(); it != m.end(); ++it)
        cout << "BiMap[" << it->first << "] = " << it->second << endl;
}

int main()
{
    typedef boost::bimap<int, string> BMap;
    BMap bm = boost::assign::list_of<BMap::relation>(1, "aaa")
                                                    (1, "zzz")
                                                    (2, "bbb")
                                                    (3, "ccc")
                                                    (4, "aaa");

    show(bm.left);
    show(bm.right);

    return 0;
}
W przykładzie nie możemy do bimapy wprowadzić nowych kluczy bo już wcześniej zastały wstawione.
Linijka 19 - istnieje już klucz 1 (linijka 18)
Linijka 22 - istnieje już klucz "aaa" (linijka 18)
Aby wyszukać odpowiednią wartość, musimy wiedzieć co w danej chwili jest kluczem. W tym celu należy skorzystać z obiektów "left" (klucz1 -> klucz2) lub "right" (klucz2 -> klucz1).
Wyniki:
BiMap[1] = aaa
BiMap[2] = bbb
BiMap[3] = ccc
BiMap[aaa] = 1
BiMap[bbb] = 2
BiMap[ccc] = 3

Brak komentarzy:

Prześlij komentarz