Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
6 / 5 / 2
Регистрация: 19.08.2018
Сообщений: 98
1

Конструктор с полем STL map

28.06.2019, 19:11. Просмотров 1853. Ответов 10

Всем привет.
Не могу понять, как правильно написать конструктор в таком классе(код ниже). В моем исполнении - ошибка error C2100: недопустимое косвенное обращение
C++
1
2
3
4
5
6
7
8
9
10
11
12
class A
{
public:
    A() = default;
    ~A() {}
    A(const string& nam, const int& first, const int& second)
        :name(nam), myMap(first, second) {}
 
private:
    string name;
    map<int, int> myMap;
};
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2019, 19:11
Ответы с готовыми решениями:

Класс с полем типа map
Привет, можно ли сделать класс с полем типа map&lt;int,int&gt;? У меня это сделать не получается -...

Map stl
Не могу понять, почему не находит через h1.find(argv). когда argv == &quot;-o&quot; vs пишет &quot;itr =...

STL :: map
Столкнулся с такой проблемой: Нужно вставить в отсортированную map-таблицу элемент. Использую:...

stl map
где можно прочитать о stl map? подскажите книги..

10
3528 / 1980 / 832
Регистрация: 07.02.2019
Сообщений: 5,304
28.06.2019, 19:41 2
Цитата Сообщение от IP_TCP Посмотреть сообщение
myMap(first, second)
Нет такого конструктора
https://en.cppreference.com/w/... er/map/map
0
6 / 5 / 2
Регистрация: 19.08.2018
Сообщений: 98
28.06.2019, 19:57  [ТС] 3
zayats80888, А какой тогда конструктор использовать для члена myMap, чтобы я мог с ним взаимодействовать?
0
3528 / 1980 / 832
Регистрация: 07.02.2019
Сообщений: 5,304
28.06.2019, 20:04 4
Цитата Сообщение от IP_TCP Посмотреть сообщение
А какой тогда конструктор использовать для члена myMap, чтобы я мог с ним взаимодействовать?
Если нужно добавить элемент прямо в списке инициализации конструктора класса А, то myMap({ std::make_pair(first, second) }), а вообще можно в теле конструктора просто insert.
0
6 / 5 / 2
Регистрация: 19.08.2018
Сообщений: 98
28.06.2019, 20:27  [ТС] 5
zayats80888, можно для тупых поподробней. Я первый раз использую map в классе; примеров нет

Добавлено через 9 минут
Поиск в нэте результатов не дал...
0
3528 / 1980 / 832
Регистрация: 07.02.2019
Сообщений: 5,304
28.06.2019, 20:54 6
IP_TCP, что конкретно вы хотите и что вам не понятно?

Добавлено через 1 минуту
там по ссылке есть примеры, кстати
1
Комп_Оратор)
Эксперт по математике/физике
8467 / 4224 / 576
Регистрация: 04.12.2011
Сообщений: 12,611
Записей в блоге: 14
28.06.2019, 21:54 7
Лучший ответ Сообщение было отмечено IP_TCP как решение

Решение

В принципе, это странный способ инициализации, но возможный:
C++
1
2
3
A(const int first, const int second)
:myMap{{first,second}}
{}
1
6 / 5 / 2
Регистрация: 19.08.2018
Сообщений: 98
28.06.2019, 22:21  [ТС] 8
IGPIGP, Не нашел других способов. Видимо, так никто не делает. Попробую по-другому решить. Спасибо.
ps.
Ошибка та же:
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.21.27702\include\xtre e(1093,1): error C2100: недопустимое косвенное обращение
0
Комп_Оратор)
Эксперт по математике/физике
8467 / 4224 / 576
Регистрация: 04.12.2011
Сообщений: 12,611
Записей в блоге: 14
28.06.2019, 22:56 9
Цитата Сообщение от IP_TCP Посмотреть сообщение
IGPIGP, Не нашел других способов. Видимо, так никто не делает.
Инициализировать map можно по разному. Можно из любого контейнера при помощи пары итераторов, например. Странным мне показалось то, что пользователь имеет одну пару ключ-значение. Почему не две или три?
Цитата Сообщение от IP_TCP Посмотреть сообщение
Ошибка та же:
Агрегатная инициализация доступна начиная с C++/11. Напишите:
C++
1
2
3
4
A(const int first, const int second)
{
myMap[first]=second;
}
как сказал zayats80888 и это будет не инициализация, но будет работать.
0
6 / 5 / 2
Регистрация: 19.08.2018
Сообщений: 98
29.06.2019, 12:17  [ТС] 10
IGPIGP,
Инициализировать map можно по разному. Можно из любого контейнера при помощи пары итераторов, например. Странным мне показалось то, что пользователь имеет одну пару ключ-значение. Почему не две или три?
Потому что в классе два поля со значениями: 1 - название вина; и 2 - пара(год урожая, и кол-во бутылок). Прата предлагает использовать такую конструкцию:
C++
1
2
typedef std::valarray<int> Arraylnt;
typedef Pair<ArrayInt, Arraylnt> PairArray;
где 1 объект пары год урожая, а второй - кол-во бутылок(этого урожая). Ну, я и подумал: почему бы не использовать map STL. Дальше-то, всё равно его изучать. И я понимаю, что не понимаю, как использовать шаблоны STL в классе. Третий день кручу-верчу Прату обмануть хочу.
0
Комп_Оратор)
Эксперт по математике/физике
8467 / 4224 / 576
Регистрация: 04.12.2011
Сообщений: 12,611
Записей в блоге: 14
29.06.2019, 12:32 11
Цитата Сообщение от IP_TCP Посмотреть сообщение
Ну, я и подумал: почему бы не использовать map STL.
Это не удачная мысль. Получится, что для каждого года количество бутылок уникально. Но есть же ещё и сорта ведь? Если использовать карту то я бы посоветовал multimap. Ключ - год, значение - объект с описанием (сорт, сахаристость и пр. лабораторные характеристики, тара, пробка/мюзле, этикет/контретикет).
Но если, всё сводится только к количеству бутылок, то для тренировки можно и сопряженные массивы попинать. Это для того чтобы вы увидели как объект собственник, владеющий этой парой массивов делает синхронные (связанные) операции над ними. Массив пар станет следующим шагом. А потом уже и дерево карта. Но имхо слишком запутанно. У Праты есть удачные места, но есть и не шибко хорошие. Как и у всех.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2019, 12:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

STL map
Вопрос:как мне узнать что не создавался map с заданым str? #include &lt;iostream&gt; #inlclude &lt;map&gt;...

Как сделать stl::stack полем класса
Здравствуйте! Столкнулся с такой проблемой - как сделать полем класса какой либо из STL контейнеров...

Вопрос об map STL
Как вивести map? list&lt;int&gt; l; for (int i=1; i&lt;=5; i++) l.push_back(i); map&lt;int,list&lt;int&gt;&gt;...

STL. Map, vector. Строки
Здравствуйте. Почти не знаком с STL. Имеется вектор строк. Нужно найти частоту использования...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.