Я писал алгоритм этим утром, и я столкнулся с любопытной ситуацией. У меня есть два std::map
s. Я хочу выполнить набор пересечений на наборах ключей каждого (чтобы найти, какие ключи являются общими для обеих карт). В какой-то момент в будущем, я думаю, что, вероятно, мне также понадобится выполнить вычитание здесь. К счастью, STL включает функции для обеих этих операций. Проблема в том, что я не могу получить std::set
ключей из std::map
. Есть какой-либо способ сделать это? Я искал что-то, что бы это просто, как это в Java:как я могу получить std :: набор ключей к std :: map
std::set<Foo> keys = myMap.getKeySet();
Я понимаю, что я не могу использовать функцию std::set_intersection()
непосредственно на итераторах в карты, так как карты выставить std::pair
объектов вместо просто ключей. Кроме того, я не думаю, что карта гарантирует заказ. Я также заинтересован в выполнении этой же операции по паре std::multimap
, если это имеет значение.
EDIT: Я забыл упомянуть, что первоначально в связи с возрастом компилятора я вынужден использовать (MSVC++ 6), большинство из хитроумных уловок шаблонов, которые доступны в импульс не может быть использован.
Не так быстро отказаться от MSVC++ 6 - см. Этот вопрос http://stackoverflow.com/questions/252492/whats-the-latest-version-of-boost-compatible-with-vc6 –
Карта делает ключи в порядке –