Как скопировать ключи и значения карты в набор пары - PullRequest
0 голосов
/ 16 апреля 2020

Привет всем, я пытаюсь перенести свои данные с карты на набор пары, это мой тестовый код

#include <iostream>
#include <unordered_map>
#include <map>
#include <algorithm>
#include <vector>




using namespace std;

int main() {


    string command;

    int resource;
   map<string, int> map;
   set< pair<string, int> > s;

   while (std::cin >> command && command != "stop" && std::cin >> resource)
    {
        map[command] += resource;

    }


    return 0;
}

Когда время l oop fini sh и карта заполнена. Как передать данные или скопировать их в набор пары?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020

Вы можете использовать set конструктор , который принимает карту в качестве диапазона.

std::set<std::pair<std::string, int>> s {map.begin(), map.end()};

Если ваш набор уже существует, вы можете использовать copy.

std::copy(map.begin(), map.end(), std::inserter(s, s.end()));
2 голосов
/ 16 апреля 2020

Конструктор множеств на самом деле обрабатывает все это для вас, поэтому вы можете просто сделать:

std::set<std::pair<std::string, int>> s(m.begin(), m.end());

Посмотреть это в действии здесь: https://ideone.com/Do0LOW

( Кроме того, вам, вероятно, не следует называть вашу переменную map такой же, как у типа. Это даже более проблематично, когда вы using namespace std такие).

...