[ Предисловие: Ассоциативные контейнеры 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"; ...