Объединить итератор для карт?

[ Предисловие: Ассоциативные контейнеры C++ как std::map немного похожи на микро-базы данных с одним ключевым столбцом. Boost's bimap возводит это в двухстолбцовую таблицу с поиском в обоих столбцах, но что касается аналогии - нет никакой "поликарты", обобщающей эту идею.]

В любом случае, я хочу продолжать думать о картах как о базах данных, и теперь я задаюсь вопросом, есть ли итератор (или какое-либо другое решение), которое позволяет мне делать UNION из нескольких составляющих карт. То есть, все карты имеют один и тот же тип (или, по крайней мере, тип значения и компаратор), и мне нужен один итератор, который будет обрабатывать всю коллекцию как большую мультикарту (повторяющиеся клавиши - это нормально) и позволит мне пересекать ее в правильном объединенном порядке.

Существует ли такая вещь, возможно, внутри Boost? Или его легко подогнать? В псевдокоде:

std::map<K, M> m1, m2;
union_iterator<K, M> u(m1, m2)
for(auto it = u.begin(); it != u.end(); ++it) { /* ... */ }

Например, если бы у нас было:

m1 = { { 9:00, "Check in"}, { 12:00, "Break" }, { 16:00, "Check out"} };
m2 = { { 10:30, "coffee" }, { 12:15, "baked beans" }, { 15:00, "lies" } };

то я хочу, чтобы итератор выдал:

9:00, "Check in"; 10:30, "coffee"; 12:00, "Break"; 12:15, "baked beans"; ...
8
задан Kerrek SB 5 September 2011 в 23:06
поделиться