Как добавить содержимое одной карты на другую карту?

У меня есть две карты:

map< string, list < string > > map1;
map< string, list < string > > map2;

Я заполнил map1, теперь хочу скопировать содержимое map1 в map2. Поэтому я просто сделал:

У меня есть некоторая операция для того, что map1 заполняется с помощью

 1. kiran, c:\pf\kiran.mdf, c:\pf\kiran.ldf
 2. test,  c:\pf\test.mdf, c:\pf\test.mdf

И теперь я должен заполнить map2 этим контентом. И agian map1 заполняется с информацией

 1. temp, c:\pf\test.mdf, c:\pf\test.ldf
 2. model, c:\model\model.mdf, c:\pf\model.ldf

Теперь я должен добавить это содержимое в map2. Как это сделать?

Ответы

Ответ 1

map<int,int> map1;
map<int,int> map2;
map1.insert(map2.begin(), map2.end());

Это будет вставлять в map1 элементы от начала до конца map2. Этот метод является стандартным для всей структуры данных STL, поэтому вы можете даже сделать что-то вроде

map<int,int> map1;
vector<pair<int,int>> vector1;
vector1.insert(map1.begin(), map1.end());

Кроме того, указатели могут также функционировать как итераторы!

char str1[] = "Hello world";
string str2;
str2.insert(str1, str1+strlen(str1));

Очень рекомендую изучать магию STL и итераторов!

Ответ 2

Вы можете использовать способ использования вставки карты. Например:

   std::map<int, int> map1;
    std::map<int, int> map2;

    map1[1] = 1;

    map2.insert(map1.begin(), map1.end());
    map1.clear();

    map1[2] =2;
    map2.insert(map1.begin(), map1.end());

Ответ 3

Вы можете сделать это несколькими способами в зависимости от того, что вы хотите сделать:

  • Используйте конструктор копирования:

    map< string, list < string > > map1;
    // fill in map1
    
    map< string, list < string > > map2(map1);
    
  • Используйте оператор присваивания, как вы указываете в вопросе:

    map< string, list < string > > map1;
    map< string, list < string > > map2;
    
    // fill in map1
    
    map2 = map1;
    
  • Сделай все сами:

    map< string, list < string > > map1;
    map< string, list < string > > map2;
    
    // fill in map1
    
    for (map< string, list < string > >::iterator i = map1.begin();
         i <= map1.end(); ++i) {
      map2[i.first()] = i.second();
    }
    

Похоже, что (1) - это то, что вы хотите.

Ответ 5

Я думаю, вы этого хотите:

mapb.insert(mapa.begin(), mapa.end());

Я считаю, что просто пропустит любые ключи, которые уже существуют в целевом объекте. Если вы хотите перезаписать значения для дубликатов ключей, вам придется перебирать элементы, вставлять их, проверять пар результатов и заменять их.

Для случая "трех карт" вам необходимо:

mapc.insert(mapa.begin(), mapa.end());
mapc.insert(mapb.begin(), mapb.end());

Ответ 6

Если вы хотите вставить карту, как вы ее определяете, это приятно:

payload.insert({
            { "key1", "one" },
            { "key2", 2 },
        });