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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
tiny developer
0 / 0 / 0
Регистрация: 27.06.2013
Сообщений: 7
#1

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

08.07.2013, 15:55. Просмотров 545. Ответов 4
Метки нет (Все метки)

Никак не могу понять что я делаю не так...
У меня есть указатель
C++
1
std::map<int,std::string>* g;
в коде я его инициализирую адресом на реальный контейнер.
Далее хочу получить элемент с ключом 4:
C++
1
std::string f = g[4];
и эта строчка не хочет компилироваться... Долго мучаюсь но не могу понять что не так???
Подскажите мне пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2013, 15:55     как получить элемент по ключу у map ?
Посмотрите здесь:

C++ std::map find. Получить ключ(элемент) и как записать все данные при объявлений?
Multimap. Как получить кол-во элементов по ключу? C++
Метод, возвращающий данные по имеющемуся ключу массива MAP C++
Map с поиском как по ключу, так и по значению C++
C++ Как получить доступ к указателям в контейнере map?
Как из map выбрать последний элемент? C++
C++ Удаления в Map по ключу
C++ Как вставить map в map
C++ Сортировка map по значению int в порядке убывания и частично по ключу char :)
Контейнер map. Осуществить ввод элементов и поиск по ключу C++
C++ Контейнер map. Поиск по заданному ключу
C++ Emplace в std::map. Как добавить элемент в std::map без копирования?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
640 / 561 / 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
640 / 561 / 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 ?
Ответ Создать тему
Опции темы

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