Russian Qt Forum
Ноябрь 01, 2024, 04:03
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
Вопрос о std::map
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Вопрос о std::map (Прочитано 7647 раз)
ksk-
Самовар
Offline
Сообщений: 178
Вопрос о std::map
«
:
Март 31, 2017, 11:41 »
Всем привет! Мучает вопрос: Почему в std::map нет оператора
Код
C++ (Qt)
const
mapped_type
&
operator
[
]
(
const
key_type
&
k
)
const
;
?
Кто знает причину его отсутствия?
Записан
ViTech
Гипер активный житель
Offline
Сообщений: 858
Re: Вопрос о std::map
«
Ответ #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
Сообщений: 178
Re: Вопрос о std::map
«
Ответ #2 :
Март 31, 2017, 13:20 »
Ясно. Спасибо. )
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Вопрос о std::map
«
Ответ #3 :
Апрель 01, 2017, 11:24 »
Цитата: ViTech от Март 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.
Я бы не назвал такое объяснение исчерпывающим. Думаю проще и лучше сказать что если метод возвращает ссылку, то она должна обязательно существовать, а в случае константного метода ее может и не быть (и создать нельзя из-за const). А вот вернуть const указатель могли бы (но не сделали, паразиты)
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Вопрос о std::map
«
Ответ #4 :
Апрель 01, 2017, 11:35 »
Цитата: Igors от Апрель 01, 2017, 11:24
А вот вернуть const указатель могли бы (но не сделали, паразиты)
И слава Богу.
У map достаточно методов определить наличие элемента и получить ссылку на него, как константную, так и не константную.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Вопрос о std::map
«
Ответ #5 :
Апрель 03, 2017, 09:16 »
Существуют ли накладные расходы при использовании at вместо operator[] если известно, что элемент существует и мапа неконстантна?
Записан
ViTech
Гипер активный житель
Offline
Сообщений: 858
Re: Вопрос о std::map
«
Ответ #6 :
Апрель 03, 2017, 12:33 »
Цитата: __Heaven__ от Апрель 03, 2017, 09:16
Существуют ли накладные расходы при использовании at вместо operator[] если известно, что элемент существует и мапа неконстантна?
Это в бОльшей степени зависит от реализации map в конкретной версии конкретного компилятора. Стандартом это особо не регламентируется.
Записан
Пока сам не сделаешь...
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Вопрос о std::map
«
Ответ #7 :
Апрель 03, 2017, 13:15 »
Не так вопрос задал. Могут ли существовать накладные расходы и в чём они могли бы проявляться.
По моим ощущениям и там и там выполняется некий map::find и дальнейшее поведение в случае ненахождения ключа отличается только в соответствии со спецификацией. В случае же успешного поиска ключа поведение одинаковое.
Так ли оно?
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Вопрос о std::map
«
Ответ #8 :
Апрель 03, 2017, 13:46 »
Цитата: __Heaven__ от Апрель 03, 2017, 13:15
Не так вопрос задал. Могут ли существовать накладные расходы и в чём они могли бы проявляться.
По моим ощущениям и там и там выполняется некий map::find и дальнейшее поведение в случае ненахождения ключа отличается только в соответствии со спецификацией. В случае же успешного поиска ключа поведение одинаковое.
Так ли оно?
Да. А метод называется lower_bound.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Вопрос о std::map
«
Ответ #9 :
Апрель 03, 2017, 14:00 »
Спасибо
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...