Я использую boost :: multi_index и получаю данные следующим образом:
sample_set::index<my_indx>::type::iterator s, end;
boost::tie(s,end) = samples.get<my_indx>().equal_range(
boost::make_tuple( "Dress", "Red" ));
Этот код восстанавливает все красные платья. Есть ли способ получить красные и желтые платья одним запросом? Как в SQL:
"Select * from clothes where type = 'Dress' and color in ('Red', 'Yellow')"
Невозможно сделать это с помощью одной операции: функции-члены поиска Boost.MultiIndex всегда возвращают диапазоны (или итераторы, которые можно рассматривать как диапазоны из одного элемента), но результат такого запроса, который вы описываете, не является диапазоном — его элементы не обязательно являются смежными. Таким образом, вам нужно выполнить два запроса, один для («Платье», «Красный») и один для («Платье», «Желтый»), а затем последовательно пройти два результирующих диапазона.
Других решений пока нет …