Я ищу ассоциативный контейнер в С++, где вместо того, чтобы требовать, чтобы его элементы были конструируемыми по умолчанию, будет генерировать исключение, когда запрашивается ключ, который не найден - отредактируйте: в соответствующих функциях, очевидно, не все из них требуют конструкции по умолчанию. Это в основном потому, что я заменяю стандартный распределитель на тот, который звонит домой и сообщает главному объекту, сколько памяти выделяется, и, следовательно, должен знать, где находится «дом».
Ассоциативный контейнер - исключение, а не конструкция по умолчанию в С++
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
Вы ищете at
участников а> boost::unordered_map
? Это не в std::tr1::unordered_map
, AFAICT.
person
Fred Foo
schedule
26.11.2010