18 / 18 / 4
Регистрация: 05.05.2013
Сообщений: 88

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

11.10.2013, 16:10. Показов 11336. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru