Я понимаю причины, по которым нельзя просто сделать это (перебалансировка и прочее):
iterator i = m.find(33);
if (i != m.end())
i->first = 22;
Но пока единственный способ (о котором я знаю) изменить ключ - это полностью удалить узел из дерева, а затем вставьте значение обратно с другим ключом:
iterator i = m.find(33);
if (i != m.end())
{
value = i->second;
m.erase(i);
m[22] = value;
}
Это кажется мне довольно неэффективным по другим причинам:
Я считаю, что распределение и освобождение являются худшими из этих трех. Я что-то упустил или есть более эффективный способ сделать это?
ОБНОВЛЕНИЕ:
iterator i = m.find(33);
if (i != m.end())
i->first = 22;
Но пока единственный способ (о котором я знаю) изменить ключ - это полностью удалить узел из дерева, а затем вставить значение обратно с другим ключом:
iterator i = m.find(33);
if (i != m.end())
{
value = i->second;
m.erase(i);
m[22] = value;
}
Это кажется мне довольно неэффективным по многим причинам :
Я считаю, что распределение и освобождение являются худшими из этих трех. Я что-то упустил или есть более эффективный способ сделать это?
ОБНОВЛЕНИЕ:
iterator i = m.find(33);
if (i != m.end())
i->first = 22;
Но пока единственный способ (о котором я знаю) изменить ключ - это полностью удалить узел из дерева, а затем вставить значение обратно с другим ключом:
iterator i = m.find(33);
if (i != m.end())
{
value = i->second;
m.erase(i);
m[22] = value;
}
Это кажется мне довольно неэффективным по многим причинам :
Я считаю, что распределение и освобождение являются худшими из этих трех. Я что-то упустил или есть более эффективный способ сделать это?
ОБНОВЛЕНИЕ:
I считают распределение и освобождение худшими из этих трех. Я что-то упустил или есть более эффективный способ сделать это?
ОБНОВЛЕНИЕ:
I считают распределение и освобождение худшими из этих трех. Я что-то упустил или есть более эффективный способ сделать это?
ОБНОВЛЕНИЕ: Я думаю, что теоретически это должно быть возможно, поэтому не думаю, что изменение структуры данных оправдано. Вот псевдоалгоритм, который я имел в виду: