Переставьте ключи в std :: map - PullRequest
0 голосов
/ 25 мая 2020

У меня карта выглядит так:

0, 1234

1, 5678

2, 9012

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

0, 1234

2, 9012

Теперь я хочу переставить ключи, чтобы карта выглядела вот так:

0, 1234

1, 9012

Есть идеи, как это сделать?

Ответы [ 3 ]

2 голосов
/ 25 мая 2020

Используйте вектор

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    int j = 0;
    std::vector<int> v = {100, 200, 300};
    std::for_each(v.begin(), v.end(), [&j](auto const& p) {
        std::cout << "index = " << j++ << " value = " << p << std::endl;
        });

    /* Delete item at index = 1 */

    v.erase(v.begin() + 1);
    j = 0;
    std::for_each(v.begin(), v.end(), [&j](auto const& p) {
        std::cout << "index = " << j++ << " value = " << p << std::endl;
        });
}

Вывод

index = 0 value = 100
index = 1 value = 200
index = 2 value = 300
index = 0 value = 100
index = 1 value = 300
0 голосов
/ 25 мая 2020

Сделать это можно, только удалив предыдущий элемент и вставив его заново с новым ключом

0 голосов
/ 25 мая 2020

То, что вы хотите, звучит очень нелогично. Ключ уникален и используется для поиска значений (очень быстро). Теперь вы хотите сменить ключ, это странно. Скорее всего, вам понадобится плоский тип списка.

Вам следует изучить std::list или std::vector. Индекс автоматически «обновляется» при удалении элементов.

...