Удаление элемента карты значением

Для нас оказалось, что довольно маленький корень нашего сервера (то есть. /) Был полон.

Там было множество журналов и файлов от пользователей в / home. Перемещение всего этого мусора на другой установленный диск решило проблемы.

Просто хотел поделиться, поскольку это может быть еще одной причиной проблемы.

5
задан Andrei Krotkov 28 May 2009 в 18:05
поделиться

3 ответа

Нет, не существует эффективного способа сделать это с помощью std :: map, кроме итерации путем сравнения значений.

Однако в большинстве случаев ключ для значения вычисляется из самого значения. Например, используя свойство Name объекта Person в качестве ключа. Может ли менеджер хранить список пар ключ / значение вместо самого значения. Это решит вашу проблему без необходимости переписывать новый алгоритм.

Или, альтернативно, вы можете сохранить обратную карту в классе менеджера. По сути, значение ключа. Таким образом, вы можете использовать его для вычисления ключа, который нужно удалить позже.

8
ответ дан 18 December 2019 в 14:50
поделиться

Глядя на документацию SGI для STL ,

Карта имеет важное свойство: вставка нового элемента на карту не делает недействительными итераторы, которые указать на существующие элементы. Стирание элемент с карты также не аннулировать любые итераторы, кроме конечно, для итераторов, которые на самом деле указать на элемент, который стирается.

Таким образом, вы можете сохранить итератор на карте внутри вашего объекта и использовать его в качестве постоянного ключа поиска, когда вам нужно удалить его запись.

4
ответ дан 18 December 2019 в 14:50
поделиться

Взгляните на библиотеку Boost Multi-Index Containers .

1
ответ дан 18 December 2019 в 14:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: