В следующем коде:
typedef bimap< set_of< std::string >, list_of< int > > bm_type;
bm_type bm;
bm.left["one"] = 1; // "one" -> 1
bm.left["one"] = 2; // replaced: "one" -> 2
bm.right[2] = "two"; // Compile error
Как я могу избавиться от ошибки компиляции? Разве нельзя получить доступ к правильному виду с operator[]
?
list_of
не имеет operator[]
,
смотреть на http://www.boost.org/doc/libs/1_47_0/libs/bimap/doc/html/boost_bimap/reference/list_of_reference.html
Этот код просто не имеет никакого смысла. Списки не иметь operator[]
потому что вы должны выбрать, куда вставить элемент, если он создан. Поскольку списки не сортируются внутри (как карты), 2
может идти в начале списка, в конце списка, в середине списка или где-либо еще.
(Boost-х list_of
имитирует семантику стандарта list
.)