Как найти предыдущий и следующий ключ / значение на карте?

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

id    prev abundance  thing
1573  -1      0       book
1864  1573    39      beds
2075  1864    41      tray
1760  2075    46      cups

Карта является:

map<int id, Abund*> oldMap;
struct Abund
{
int prev;
int abundance;
string thing;
}

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

 id2    prev2 prevAbun next2  nextAbun  thing2
1573     -1            1864   39        book
1864   1573     0      2075   41        beds
2075   1864     39     1760   46        tray
1760   2075     41                      cups

Предыдущая и следующая строка на карте 1 должны стать столбцами в newMap
Пока что я создал новую карту и новую структуру:

struct NewAbund
{
vector<int> prev2;
vector<int> prevAbun;
vector<int> next2;
vector<int> nextAbun;
string thing2;
}
map<int id2, NewAbund*> newMap;

Теперь я понятия не имею, как должна работать логика для получения предыдущей строки из oldMap и установки ее в качестве значения в newMap. Заранее спасибо!!

1

Решение

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

С другой стороны, поскольку вы всегда можете найти следующий и предыдущий ключи в упорядоченной карте (хотя на это требуется O (log n) времени), на самом деле, возможно, нет необходимости переходить ко всем трудностям для денормализации данных. Если вы используете c ++ 11, вы найдете std :: next и std :: prev, которые действительно облегчат выполнение этих операций. (Если нет — почему нет? — вы можете легко определить их в терминах std :: advance.)

1

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

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

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