![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Differences with standard mapsBoost , Chapter 1. Boost.Bimap , The tutorial
|
Тип боковой коллекции |
Исключенные данные |
---|---|
< | constant |
< | constant |
unordered_set_of | constant |
< | constant |
list_of | изменчивый |
< | изменчивый |
unconstrained_set_of | изменчивый |
Вот несколько примеров. При отмене итераторов возвращается тип, который являетсясигнатурой-совместимымс этими типами.
Тип Бимапа |
Типы, совместимые с подписью |
---|---|
bimap<A,B> | iterator -> relation<const
A,const B>
|
bimap<multiset_of<A>,unordered_set_of<B>
> | iterator -> relation<const
A,const B>
|
< | iterator -> relation<const
A,B>
|
< | < < < |
bimap<list_of<A>,unconstrained_set_of<B>
> | iterator -> relation<A,B>
|
<set_of
>и<unordered_set_of
>карты просматривают перегрузку<operator[]
>для извлечения связанных данных заданного ключа только тогда, когда другой тип сбора является изменчивым. В этих случаях он работает так же, как и стандарт.
bimap< unorderd_set_of< std::string>, list_of<int> > bm; bm.left["one"] = 1; // Ok
Стандарт определяет функцию доступа для<map
>и<unordered_map
>:
const data_type & at(const key_type & k) const; data_type & at(const key_type & k);
Эти функции ищут ключ и возвращают связанное значение данных, но бросают исключение<std::out_of_range
>, если ключ не найден.
В бимапах константная версия этих функций приведена для<set_of
>и<unorderd_set_of
>видов карт независимо от другого типа коллекции. Изменяемая версия предоставляется только тогда, когда другой тип коллекции является изменяемым.
The following examples shows the behaviour of at(key)
typedef bimap< set_of< std::string >, list_of< int > > bm_type; bm_type bm; try { bm.left.at("one") = 1; // throws std::out_of_range } catch( std::out_of_range & e ) {} assert( bm.empty() ); bm.left["one"] = 1; // Ok assert( bm.left.at("one") == 1 ); // Ok
typedef bimap< multiset_of<std::string>, unordered_set_of<int> > bm_type; bm_type bm; bm.right[1] = "one"; // compilation error bm.right.insert( bm_type::right_value_type(1,"one") ); assert( bm.right.at(1) == "one" ); // Ok try { std::cout << bm.right.at(2); // throws std::out_of_range } catch( std::out_of_range & e ) {} bm.right.at(1) = "1"; // compilation error
Сложность некоторых операций различна в бимапах. Прочитайтессылку, чтобы найти сложность каждой функции.
Статья Differences with standard maps раздела Chapter 1. Boost.Bimap The tutorial может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: The tutorial ::
реклама |