Сегодня утром я писал алгоритм, и я столкнулся с любопытной ситуацией. У меня два std::map s. Я хочу выполнить набор пересечений на наборах ключей каждого (чтобы найти, какие ключи являются общими для обеих карт). В какой-то момент в будущем, я думаю, что, вероятно, мне также понадобится выполнить вычитание здесь. К счастью, STL включает функции для обеих этих операций. Проблема в том, что я не могу получить std::set ключей из std::map. Есть какой-либо способ сделать это? Я ищу что-то, что было бы так просто, как в Java:
std::set<Foo> keys = myMap.getKeySet();
Я понимаю, что я не могу использовать функцию std::set_intersection() непосредственно на итераторах в карты, потому что в картах отображаются объекты std::pair вместо простых ключей. Кроме того, я не думаю, что карта гарантирует заказ. Я также заинтересован в выполнении этой же операции на паре std::multimap s, если это имеет значение.
EDIT. Я забыл упомянуть изначально, что из-за возраста компилятора, который я вынужден использовать (MSVС++ 6), большинство изящных шаблонных трюков, доступных в boost, не могут быть б.