Как редактировать элемент в std :: set, не используя 'mutable' или 'const_cast', и не стирая и не вставляя снова? - PullRequest
1 голос
/ 13 февраля 2020

Предположим, у меня есть структура с именем "ClientInfo". Эта структура содержит некоторую информацию о некотором cl inet. И предположим, что каждый клиент имеет постоянный идентификатор и некоторую другую информацию, такую ​​как «Адрес» или «Баланс», которую можно изменить. Если я хочу хранить информацию о клиентах в каком-то контейнере, который дает мне вставку / удаление log (n), то я думаю, что std :: set является наиболее подходящим. Но, к сожалению, набор не позволяет изменять какой-либо элемент внутри него, даже если изменение не повлияет на порядок (я думаю). Я искал в inte rnet решения, и все, что я нашел, было одно из следующего:

  1. Использовать 'mutable'
  2. Использовать const_cast
  3. You можно стереть и вставить снова (O (1))
  4. Вы можете использовать std :: map

-

1/2 - я не думаю, Я собираюсь использовать первые два варианта, потому что я не хочу связываться с константностью моей программы.

3 - Кроме того, я думаю, что даже если стирание и вставка - это O (1), я думаю, если бы я мог просто изменить элемент, это было бы быстрее.

4 - Также я не думаю, std :: map - правильный выбор, так как я хочу получить доступ к идентификатору клиента. Если я использую std :: map, у меня есть два варианта:

  1. Чтобы дважды скопировать идентификатор, Один раз для ключа карты и Один раз внутри структуры.
  2. Чтобы взять отключить идентификатор из структуры, чтобы избежать дублирования, но в этом случае у меня не будет прямого доступа к идентификатору клиента внутри структуры.

Очевидно, что я не хочу скопируйте идентификатор, так как это может быть что-то дорогое, например, std :: string или какой-то объект.

-

Итак, мой вопрос: как изменить элемент внутри std :: set напрямую, без использования 'mutable' или 'const_cast', без стирания и вставки снова и без использования std: :карта? Как сказать std :: set, что идентификатор является константой и что это единственное, что влияет на порядок элементов, и указать ему разрешить изменять что-либо еще, кроме идентификатора?

...