Форум программистов, компьютерный форум CyberForum.ru

как получить элемент по ключу у map ? - C++

Восстановить пароль Регистрация
 
tiny developer
0 / 0 / 0
Регистрация: 27.06.2013
Сообщений: 7
08.07.2013, 15:55     как получить элемент по ключу у map ? #1
Никак не могу понять что я делаю не так...
У меня есть указатель
C++
1
std::map<int,std::string>* g;
в коде я его инициализирую адресом на реальный контейнер.
Далее хочу получить элемент с ключом 4:
C++
1
std::string f = g[4];
и эта строчка не хочет компилироваться... Долго мучаюсь но не могу понять что не так???
Подскажите мне пожалуйста!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
08.07.2013, 16:06     как получить элемент по ключу у map ? #2
если почитать про работу мап, то можно заметить что оператор [] не подходит для обращения к элементу, потому что в случае отсутствия элемента с таким ключем, в контейнер добавяется еще один элемент с таким ключем, и значением, которое создаст дефолтный конструктор содержимого, а чтобы обратится адэкватный вариант:
C++
1
2
3
4
5
6
7
8
9
map<int,std::string>::iterator it = g->find(4);
if(it != g->end())
{
//элемент найден работай с ним по итератору наверное так std::string f = *it;
}
else
{
// элемент не найден
}
Добавлено через 2 минуты
а если Вы все же хотите обращатся оператором [] тогда попробуйте так:
C++
1
std::string f = *g[4];
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
08.07.2013, 16:11     как получить элемент по ключу у map ? #3
правильно будет так:
C++
1
2
3
4
5
6
std::string f;
try {
    f = g->at(4); //шлет out_of_range если ключ не найден
} catch (const exception &e) {
    cerr << "Ключ не найден";
}
Но вообще, если обращаться через указатель, то можно так:
C++
1
2
3
g->operator[](4);
или
(*g)[4];
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
08.07.2013, 16:14     как получить элемент по ключу у map ? #4
Цитата Сообщение от Olivеr Посмотреть сообщение
C++
1
(*g)[4];
согласен.
Насчет исключений, помоему файнд все таки адэкватнее...ну это видимо по желанию прогера
tiny developer
0 / 0 / 0
Регистрация: 27.06.2013
Сообщений: 7
08.07.2013, 16:22  [ТС]     как получить элемент по ключу у map ? #5
спасибо всем огромное! Я применила ваши советы и у меня получилось!!!
Yandex
Объявления
08.07.2013, 16:22     как получить элемент по ключу у map ?
Ответ Создать тему
Опции темы

Текущее время: 01:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru