Ну, честно говоря, за экранами это все равно приведет к операции вставки и удаления, с той лишь разницей, что значение-часть не будет скопировано. Хотя это, кажется, является вашей самой большой проблемой, если ваш объект не будет слишком сильно копировать в большом контейнере, операция обновления для повторной стабилизации заказанного контейнера все равно будет тяжелее.
Теперь для этого потребуются некоторые важные изменения, идущие дальше, чем ассоциативные контейнеры. Вот два наиболее важных, которые я вижу:
- Класс
std::pair
нуждается в обновлении, потому что вы должны иметь возможность обновлять ключ без создания новой пары (так как это также скопирует объект значения).
- Вам нужна функция обновления, которая удаляет пару из дерева, вызывает новую логику из 1. и вставляет ее заново.
Я думаю, что основная проблема связана с первой, поскольку std::pair
на данный момент на самом деле очень простая оболочка, и ваше предложение исключит этот принцип и добавит к нему некоторую (ненужную) сложность. Также обратите внимание, что вызов 2 на самом деле не добавляет новых функций, но оборачивает систему, которую разработчик мог бы легко управлять с помощью ссылок и тому подобного. Если бы они добавили всю эту упаковку в std, она стала бы действительно огромной раздутой библиотекой.
Если вам нужен этот принцип, вам следует поискать более сложные библиотеки (вероятно, в boost есть некоторые). Или вы должны просто использовать ссылку / shared_ptr в качестве значения_типа.