Как перегруппировать карту и вставить элементы в новую карту?

У меня есть карта со следующими данными:

id    prev abundance  thing
1573  -1      0       book
1574  1573    39      beds
1575  1574    41      tray
1576  1575    46      cups

Код, который я пишу, имеет следующее:

struct Abund
{
int prev;
int abundance;
string thing;
}

map<int id, Abund*> oldMap;

Теперь мне нужно создать новую карту, которая должна выглядеть следующим образом:

id2    prev2 prevAbun next2  nextAbun  thing2
1573                   1574   39        book
1574  1573    0        1575   41        beds
1575  1574    39       1576   46        tray
1576  1575    41                        cups

Итак, для этого я создал новую карту и новую структуру:

struct NewAbund
{
vector<int> prev2;
vector<int> prevAbun;
vector<int> next2;
vector<int> nextAbun;
string thing2;

NewAbund() :
prev2(0),
prevAbun(0),
next2(0),
nextAbun(0),
thing2() {}
NewAbund(
vector<int> nodeprev2,
vector<int> prev_cnt2,
vector<int> nodenext2,
vector<int> next_cnt2,
string node_thing2) :
prev2(nodeprev2), prevAbun(prev_cnt2), next2(nodenext2), nextAbun(next_cnt2), thing2(node_thing2) {}
}

NewAbund(const Abund& old)
{
thing2 = old.thing;
prev2.push_back(old.prev);
prevAbun.push_back(old.abundance);
}

map<int id, NewAbund*> newMap;

Теперь я совершенно заблудился относительно того, как я могу перенести элементы с одной карты на другую. 🙁

0

Решение

Вы хотите заполнить элементы со старой карты (Abund) к элементам новой карты (NewAbund). Первое, что вам нужно сделать, это конвертировать Abund объекты в NewAbund объекты. Это сделано с добавлением нового конструктора NewAbund(const Abund& old)

struct NewAbund
{
vector<int> prev2;
vector<int> prevAbun;
vector<int> next2;
vector<int> nextAbun;
string thing2;

NewAbund(const Abund& old) {
//create a NewAbund using the old data
}

};

Когда у нас есть метод преобразования старых данных в новые, мы просто перемещаем все со старой карты на новую карту следующим образом.

typedef map<int id, Abund*>::iterator iter;
iter it = oldMap.begin();
iter end = oldMap.end();
for(; it != end; ++it) {
newMap[it->first] = new NewAbund(*(it->second));
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]