Russian Qt Forum

Программирование => С/C++ => Тема начата: ksk- от Март 31, 2017, 11:41



Название: Вопрос о std::map
Отправлено: ksk- от Март 31, 2017, 11:41
Всем привет! Мучает вопрос: Почему в std::map нет оператора
Код
C++ (Qt)
const mapped_type& operator[] (const key_type& k) const;
 
?

Кто знает причину его отсутствия?


Название: Re: Вопрос о std::map
Отправлено: ViTech от Март 31, 2017, 12:37
Есть такая версия:

std::map::operator[] (http://en.cppreference.com/w/cpp/container/map/operator_at)
Цитировать
operator[] is non-const because it inserts the key if it doesn't exist. If this behavior is undesirable or if the container is const, at() may be used.


Название: Re: Вопрос о std::map
Отправлено: ksk- от Март 31, 2017, 13:20
Ясно. Спасибо. )


Название: Re: Вопрос о std::map
Отправлено: Igors от Апрель 01, 2017, 11:24
Есть такая версия:

std::map::operator[] (http://en.cppreference.com/w/cpp/container/map/operator_at)
Цитировать
operator[] is non-const because it inserts the key if it doesn't exist. If this behavior is undesirable or if the container is const, at() may be used.
Я бы не назвал такое объяснение исчерпывающим. Думаю проще и лучше сказать что если метод возвращает ссылку, то она должна обязательно существовать, а в случае константного метода ее может и не быть (и создать нельзя из-за const). А вот вернуть const указатель могли бы (но не сделали, паразиты)


Название: Re: Вопрос о std::map
Отправлено: Old от Апрель 01, 2017, 11:35
А вот вернуть const указатель могли бы (но не сделали, паразиты)
И слава Богу.
У map достаточно методов определить наличие элемента и получить ссылку на него, как константную, так и не константную.



Название: Re: Вопрос о std::map
Отправлено: __Heaven__ от Апрель 03, 2017, 09:16
Существуют ли накладные расходы при использовании at вместо operator[] если известно, что элемент существует и мапа неконстантна?


Название: Re: Вопрос о std::map
Отправлено: ViTech от Апрель 03, 2017, 12:33
Существуют ли накладные расходы при использовании at вместо operator[] если известно, что элемент существует и мапа неконстантна?

Это в бОльшей степени зависит от реализации map в конкретной версии конкретного компилятора. Стандартом это особо не регламентируется.


Название: Re: Вопрос о std::map
Отправлено: __Heaven__ от Апрель 03, 2017, 13:15
Не так вопрос задал. Могут ли существовать накладные расходы и в чём они могли бы проявляться.
По моим ощущениям и там и там выполняется некий map::find и дальнейшее поведение в случае ненахождения ключа отличается только в соответствии со спецификацией. В случае же успешного поиска ключа поведение одинаковое.
Так ли оно?


Название: Re: Вопрос о std::map
Отправлено: Old от Апрель 03, 2017, 13:46
Не так вопрос задал. Могут ли существовать накладные расходы и в чём они могли бы проявляться.
По моим ощущениям и там и там выполняется некий map::find и дальнейшее поведение в случае ненахождения ключа отличается только в соответствии со спецификацией. В случае же успешного поиска ключа поведение одинаковое.
Так ли оно?
Да. А метод называется lower_bound.


Название: Re: Вопрос о std::map
Отправлено: __Heaven__ от Апрель 03, 2017, 14:00
Спасибо :)