У меня карта выглядит так:
0, 1234
1, 5678
2, 9012
Теперь, например, я удаляю запись с ключом 1, поэтому карта выглядит так:
Теперь я хочу переставить ключи, чтобы карта выглядела вот так:
1, 9012
Есть идеи, как это сделать?
Используйте вектор
#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
Сделать это можно, только удалив предыдущий элемент и вставив его заново с новым ключом
То, что вы хотите, звучит очень нелогично. Ключ уникален и используется для поиска значений (очень быстро). Теперь вы хотите сменить ключ, это странно. Скорее всего, вам понадобится плоский тип списка.
Вам следует изучить std::list или std::vector. Индекс автоматически «обновляется» при удалении элементов.
std::list
std::vector