Сегодня утром я писал алгоритм, и я столкнулся с любопытной ситуацией. У меня два 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, не могут быть б.