Russian Qt Forum
Ноябрь 01, 2024, 04:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос о std::map  (Прочитано 7647 раз)
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« : Март 31, 2017, 11:41 »

Всем привет! Мучает вопрос: Почему в std::map нет оператора
Код
C++ (Qt)
const mapped_type& operator[] (const key_type& k) const;
 
?

Кто знает причину его отсутствия?
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #1 : Март 31, 2017, 12:37 »

Есть такая версия:

std::map::operator[]
Цитировать
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.
Записан

Пока сам не сделаешь...
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« Ответ #2 : Март 31, 2017, 13:20 »

Ясно. Спасибо. )
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Апрель 01, 2017, 11:24 »

Есть такая версия:

std::map::operator[]
Цитировать
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 указатель могли бы (но не сделали, паразиты)
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #4 : Апрель 01, 2017, 11:35 »

А вот вернуть const указатель могли бы (но не сделали, паразиты)
И слава Богу.
У map достаточно методов определить наличие элемента и получить ссылку на него, как константную, так и не константную.

Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #5 : Апрель 03, 2017, 09:16 »

Существуют ли накладные расходы при использовании at вместо operator[] если известно, что элемент существует и мапа неконстантна?
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #6 : Апрель 03, 2017, 12:33 »

Существуют ли накладные расходы при использовании at вместо operator[] если известно, что элемент существует и мапа неконстантна?

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

Пока сам не сделаешь...
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #7 : Апрель 03, 2017, 13:15 »

Не так вопрос задал. Могут ли существовать накладные расходы и в чём они могли бы проявляться.
По моим ощущениям и там и там выполняется некий map::find и дальнейшее поведение в случае ненахождения ключа отличается только в соответствии со спецификацией. В случае же успешного поиска ключа поведение одинаковое.
Так ли оно?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #8 : Апрель 03, 2017, 13:46 »

Не так вопрос задал. Могут ли существовать накладные расходы и в чём они могли бы проявляться.
По моим ощущениям и там и там выполняется некий map::find и дальнейшее поведение в случае ненахождения ключа отличается только в соответствии со спецификацией. В случае же успешного поиска ключа поведение одинаковое.
Так ли оно?
Да. А метод называется lower_bound.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #9 : Апрель 03, 2017, 14:00 »

Спасибо Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.073 секунд. Запросов: 22.