Как добавить содержимое одной карты на другую карту?
У меня есть две карты:
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) - это то, что вы хотите.
Ответ 4
Похоже, это правильный способ сделать это в соответствии с документацией: http://www.cplusplus.com/reference/stl/map/operator=/
Ответ 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 },
});