Търся асоциативен контейнер в C++, където вместо да изисква елементите му да бъдат конструктивни по подразбиране, ще хвърли изключение, когато е поискан ключ, който не е намерен - редактиране: в подходящите функции, очевидно не всички изискват конструкция по подразбиране. Това е основно, защото заменям стандартния разпределител с такъв, който се обажда вкъщи и казва на главния обект колко памет е разпределена и следователно трябва да знае къде е „домът“.
Асоциативен контейнер - изключение, а не конструкция по подразбиране в C++
comment
Бихте ли могли да обвиете типа стойност в друг тип, който (a) конструира от основния тип, (b) преобразува в основния тип, (c) хвърля изключение в своя конструктор без аргументи? Наистина не съм го обмислял.
- 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
членове a> от boost::unordered_map
? Те не са в std::tr1::unordered_map
, AFAICT.
person
Fred Foo
schedule
26.11.2010