Ассоциативный контейнер - исключение, а не конструкция по умолчанию в С++

Я ищу ассоциативный контейнер в С++, где вместо того, чтобы требовать, чтобы его элементы были конструируемыми по умолчанию, будет генерировать исключение, когда запрашивается ключ, который не найден - отредактируйте: в соответствующих функциях, очевидно, не все из них требуют конструкции по умолчанию. Это в основном потому, что я заменяю стандартный распределитель на тот, который звонит домой и сообщает главному объекту, сколько памяти выделяется, и, следовательно, должен знать, где находится «дом».


person Puppy    schedule 26.11.2010    source источник
comment
Не могли бы вы обернуть тип значения в другой тип, который (а) конструируется из базового типа, (б) преобразуется в базовый тип, (в) генерирует исключение в своем конструкторе без аргументов? Не совсем обдумал.   -  person Steve Jessop    schedule 26.11.2010


Ответы (2)


Самый простой ответ для std::map — не использовать operator[]. Используйте insert для создания новых элементов и find для поиска существующего элемента. Если вы не используете operator[], содержащийся тип не обязательно должен быть конструируемым по умолчанию, и вы можете решить создать исключение, если find не находит объект.

person David Rodríguez - dribeas    schedule 26.11.2010