Вы можете перемещать карту в обратном порядке ключа для положительных клавиш, чтобы обойти побочные эффекты и создать новые пары ключ/значение. Вы можете сделать эквивалент для отрицательных ключей.
#include <cstdio>
#include <algorithm>
#include <map>
using namespace std;
int main() {
map<int, int> m = {
{10, 20},
{-5, 23},
{-10, 7},
{20, 30},
{15, 21},
{18, 2},
};
for (auto it = m.begin(); it != m.end() && it->first < 0; it = m.erase(it)) {
m[it->first * 2] = 2 * it->second;
}
for (auto it = m.rbegin(); it != m.rend() && it->first > 0; it++) {
m[it->first * 2] = 2 * it->second;
m.erase(----it.base());
}
for (auto &p: m) {
printf("%d, %d\n", p.first, p.second);
}
}
Выход:
-20, 14
-10, 46
20, 40
30, 42
36, 4
40, 60
Пожалуйста, покажите свой код, обратите внимание, что изменение ключей Твоих карт будет аннулированием итератора используются как карта должна быть заказана, и почему вы хотите изменить ключ таким образом? Вы уверены, что хотите «отобразить»? – EdChum
Я не думаю, что даже если вы найдете что-то вроде этого, это сэкономит массу памяти или вычислительную мощность. В конце концов, большинство из этих функций просто делают то, чего вы хотите избежать в фоновом режиме. – Sossenbinder
Ваша проблема не совсем определена. Удвоение ключа может дать вам ключ от элемента, который уже существует. Какое значение вы бы тогда удвоили? – juanchopanza