Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/56: Рейтинг темы: голосов - 56, средняя оценка - 4.86
18 / 18 / 4
Регистрация: 05.05.2013
Сообщений: 88

Ассоциативный массив

11.10.2013, 16:10. Показов 11292. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Простите за нубский вопрос, но гугл мне не помог(

Нужно реализовать список радиочастот и названий радио. Получается нужен ассоциативный массив. Я выбрал map.
Все бы ничего, но ключ масива должен быть double (т.к. это частота), а значиние строка (название радио).
Вот здесь и возник ступор. Приведу пример кода:

C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <string>
#include <iomanip>
#include <map>
 
using namespace std;
 
map<double, string> radioMap;
radioMap.insert(pair(103.6, "Radio Roks FM"));
Visual Studio тыкает носом сюда:
C++
1
radioMap.insert(pair(103.6, "Radio Roks FM"));
и говорит:
error C2143: синтаксическая ошибка: отсутствие ";" перед "->"
и еще:
IntelliSense: это объявление не содержит класс хранения или спецификатор типа
Как с этим бороться или предложите другое, подходящее решение.
Спасибо! =)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.10.2013, 16:10
Ответы с готовыми решениями:

Ассоциативный массив
Задача будет такая: с платы (AFDX) считываются данные в таком формате: индекс 9 байт и сами данные 1500байт. &quot;Индекс&quot; на самом...

ассоциативный массив
мне нужно написать прграмму с динамическими шаблонными структурами, а именно с ассоциативным массивом, но что он из себя представляет, я...

Ассоциативный массив
Добрый день. Есть массив map&lt;char,vector&lt;bool&gt; &gt; table; Как пройтись по этому массиву итератором, чтобы вывести содержимое на экран? ...

10
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
11.10.2013, 16:12
Цитата Сообщение от gund Посмотреть сообщение
error C2143: синтаксическая ошибка: отсутствие ";" перед "->"
хоть убей не вижу тут "->"
кинь побольше кода, может ошибка не тут
0
 Аватар для zitxbit
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
11.10.2013, 16:13
Попробуйте вот-так:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <string>
#include <iomanip>
#include <map>
 
using namespace std;
 
map<double, string> radioMap;
radioMap.insert(pair<double,string>(103.6, "Radio Roks FM"));
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
11.10.2013, 16:18
Цитата Сообщение от gund Посмотреть сообщение
Все бы ничего, но ключ масива должен быть double
std::ratio же, ну или pair двух целых
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
11.10.2013, 16:22
Цитата Сообщение от gund Посмотреть сообщение
C++
1
pair(103.6, "Radio Roks FM")
C++
1
make_pair(103.6, "Radio Roks FM")
1
18 / 18 / 4
Регистрация: 05.05.2013
Сообщений: 88
11.10.2013, 18:19  [ТС]
Трабл вот в чем, мне нужно юзать этот массив в классе "Радио", соответственно я решил объявить его в заголовочном файле этого класса (где собственно и была ошибка). Но интереса ради я поместил этот код:
C++
1
2
map<double, string> radioMap;
radioMap.insert(make_pair(103.6, "Radio Roks FM"));
в функцию main() и ошибки не стало (выходит такие манипуляции разрешены только в теле функции/метода), но мне такой вариант уж точно не катит =(

Кто вкурсе как решить "такое"? =)
Возможно придется инициализировать этот массив конструктором класса "Радио", но это уже крайний способ, если никто не предложит.

Спасибо)

Добавлено через 12 минут
Пробовал в конструкторе запилить, тоже неудача, в коде:
C++
1
2
// Init Radio Map List
radioMap.insert(pair<double, string>(103.6, "Radio Roks FM"));
Таккая вот хрень:
Ошибка 1 error LNK2005: "class std::map<double,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<double>,class std::allocator<struct std::pair<double const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > radioMap" (?radioMap@@3V?$map@NV?$basic_string@DU? $char_traits@D@std@@V?$allocator@D@2@@st d@@U?$less@N@2@V?$allocator@U?$pair@$$CB NV?$basic_string@DU?$char_traits@D@std@@ V?$allocator@D@2@@std@@@std@@@2@@std@@A) уже определен в laba1.obj C:\Users\Алексей\Documents\427 ПОМ\OOP\laba1\laba1\Radio.obj laba1
И вместо pair<double, string> make_pair(), тоже:
Ошибка 1 error LNK2005: "class std::map<double,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<double>,class std::allocator<struct std::pair<double const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > radioMap" (?radioMap@@3V?$map@NV?$basic_string@DU? $char_traits@D@std@@V?$allocator@D@2@@st d@@U?$less@N@2@V?$allocator@U?$pair@$$CB NV?$basic_string@DU?$char_traits@D@std@@ V?$allocator@D@2@@std@@@std@@@2@@std@@A) уже определен в laba1.obj C:\Users\Алексей\Documents\427 ПОМ\OOP\laba1\laba1\Radio.obj laba1
Ужас какой-то...
Как можно исправить уже голову сломал =)
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
11.10.2013, 18:26
можно статически инициализировать map, смотря какой стандарт C++ используешь
если не C++0x, то можно так

C++
1
2
3
4
5
6
7
8
std::pair<double, std::string> map_data[] = {
    std::make_pair(1, "a"),
    std::make_pair(2, "b"),
    std::make_pair(3, "c")
};
 
std::map<double, std::string> radioMap(map_data,
    map_data + sizeof map_data / sizeof map_data[0]);
0
18 / 18 / 4
Регистрация: 05.05.2013
Сообщений: 88
11.10.2013, 21:55  [ТС]
Попробовал Вашим способом, тоже ошибка.
Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>
#include <iomanip>
#include <map>
 
using namespace std;
 
pair<double, string> radioList[] = {
    make_pair(103.6, "Radio Roks FM")
};
map<double, string> radioMap(radioList, radioList + sizeof radioList / sizeof radioList[0]);
Вот текст ошибки:

Ошибка 1 error LNK2005: "struct std::pair<double,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > * radioList" (?radioList@@3PAU?$pair@NV?$basic_string @DU?$char_traits@D@std@@V?$allocator@D@2 @@std@@@std@@A) уже определен в laba1.obj C:\Users\Алексей\Documents\427 ПОМ\OOP\laba1\laba1\Radio.obj laba1
Такое впечатление что библиотека Map просто нерабочая...
Хотя кто его знает =)
Но решения я не нашел пока, кто то еще может имеет идеи по этому поводу?
Спасибо!
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
11.10.2013, 22:06
Цитата Сообщение от gund Посмотреть сообщение
Вот код:
Это заголовочный файл? Похоже на нарушение ODR. Определение должно быть одно, в одном файле c исходным кодом. В заголовочных - только объявление.
В заголовочных файлах:
C++
1
extern map<double, string> radioMap;
В исходнике:
C++
1
2
3
4
5
6
7
8
9
namespace {
 
pair<double, string> radioList[] = {
    make_pair(103.6, "Radio Roks FM")
};
 
}
 
map<double, string> radioMap(radioList, radioList + sizeof radioList / sizeof radioList[0]);
Хотя я и не понял, зачем эта глобальная переменная...
1
18 / 18 / 4
Регистрация: 05.05.2013
Сообщений: 88
11.10.2013, 22:20  [ТС]
gray_fox, Спасибо, это то что нужно и работает =)

На счет глобальности этой переменной, она нужна будет не только в классе но и в главной функции тоже (хотя можно было юзать из класса), но по-моему будет правильней глобальной (как константа).

Всем спасибо за оказанную помощь. =)
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
11.10.2013, 22:25
Цитата Сообщение от gund Посмотреть сообщение
как константа
Она сейчас не константа по факту; добавь const, по желанию)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.10.2013, 22:25
Помогаю со студенческими работами здесь

Ассоциативный массив
Пытаюсь написать что-то вроде ассоциативного массива, но проверка показывает, что не всё правильно добавляется (метод Add). void...

Ассоциативный массив
Добрый день. Нужно заполнить map &lt;char,vector&lt;int&gt; &gt; из файла, содержание которого: 1 f 2 g 5 c Вот моя программа #include...

Ассоциативный массив
Доброго времени суток! Столкнулся с таким вопросом: к какому элементу ассоциативного массива осуществляется более быстрый доступ: к первому...

динамический ассоциативный массив
Подскажите как организовать ассоциативный массив в виде динамической структуры для класса template &lt;class T&gt; class el ...

Ассоциативный массив своими руками
Подскажите, пожалуйста, как реализовать такую конструкцию: array = 324;


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru