Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

12K
19 марта 2008 года
Sholah_Weras
99 / / 04.12.2007
Доброе время суток!

Вопрос:
Как правильно сделать контейнер map, чтобы ключем была строка, а значением массив объектов?

Пишу так:

Day day[6];
typedef map<string, day> Spisok;
Spisok spisok;

Выдется ошибка (в C++Builder):
Member Workspace::day cannot be used without an object

Что делать и как быть?

Заренн благодарен.
360
19 марта 2008 года
P*t*
474 / / 15.02.2007
 
Код:
typedef map<string, day> Spisok;

тут у тебя day - это не тип данных, а переманная.
нужно так:
 
Код:
typedef map<string, Day* > Spisok;
3
19 марта 2008 года
Green
4.8K / / 20.01.2000
Цитата: P*t*
 
Код:
typedef map<string, day> Spisok;

тут у тебя day - это не тип данных, а переманная.
нужно так:
 
Код:
typedef map<string, Day* > Spisok;


Хм... возможны серьезные проблемы при использовании указателя т.о.:
утечка памяти, попытка удаления автоматических и статических переменных.

Лучше обернуть массив (т.к. сами по себе массивы не могут храниться в контейнерах):

 
Код:
struct Days
{
    Day day[6];
};

typedef map<string, Days> Spisok;
Spisok spisok;

Кстати, в boost есть уже готовая соотв. обертка для массивов.
12K
19 марта 2008 года
Sholah_Weras
99 / / 04.12.2007
2 Green

Да, примерно к такому же решению я и пришел (только сделал это в Day.h, объявив новый класс), но Ваш вариант удобнее :)

Далее, странное дело, но у меня выдается ошибка при компиляции в файле _pair.h:
Undefined structure 'string'

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

P.S.
Прощу прощения у админов и простых смертных, что тема размещена не в теме C++Builder - так получилось)
12K
20 марта 2008 года
Sholah_Weras
99 / / 04.12.2007
И вопрос следом (дабы не засорять форум).
Вот я создаю такой контейнер, все хорошо (это при учете того, что найдется решение проблемы, написанной выше), а теперь я пытаюсь добавить пару: строку и мой тип.
Вопрос - строк и объектов типа Days будет много. Количество зависит от БД, но это отдельная песня. Как мне реализовать добавление новых пар, с учетом неопределенного их количества?
С STL только начинаю знакомиться, но уже очень надо
398
20 марта 2008 года
Alexandoros
630 / / 21.10.2005
spisok["mystring"] = myval;
12K
20 марта 2008 года
Sholah_Weras
99 / / 04.12.2007
2 Alexandoros
Таким образом добавится одна пара. А вот объектов myval будет куда как больше. И мне что, при создании пар, надо будет создавать такое же количество уникальных индентификаторов?

spisok[mystring1] = myval1;
spisok[mystring2] = myval2;
spisok[mystring3] = myval3;
//причем повторяюсь, кол-во пар я не знаю

Может есть какие-нибудь проверенные стандартные средства?
92
20 марта 2008 года
Тень Пса
2.2K / / 19.10.2006
может ты структуру данных не правильно выбрал? =)

что тебе мешает использовать в качестве идентификатора, скажем, уникальный id записи в БД?

что вообще в этом ассоц. массиве будет храниться? зачем хранить отдельными кусками по несколько объектов? и что планировалось изначально использовать в качестве ключа? :)
12K
20 марта 2008 года
Sholah_Weras
99 / / 04.12.2007
2 Тень Пса
В качестве ключа-идентификатора будет использоваться имя столбца БД.

В массиве хранится вот что:
Ключ - имя учебной группы
Значение - 6 (по кол-ву рабочих дней) структур, в которых описывается дни недели с теми парами (еще структура), которые в этот день есть.

Суть контейнера - хранить рассписание учебных групп. Суть класса - выводить на экран, предоставлять доступ (чтение, запись) к кокрнетным парам, конкретных дней, конкретнвых групп. Во :)
12K
20 марта 2008 года
Sholah_Weras
99 / / 04.12.2007
В связи с нехваткой времени и знаний, решил просто создать массив объектов определенного размера (и никаких контейнеров)) Там все относителньо просто.

Но ламерские вопросы я так и продолжу задавать))
Рассмотрим ф-ию:
GetPrivateProfileString("smth", "smb", "A", symbol, 2, "settings.ini");
где
char symbol[1];
Естественно, в symbol записывается "A". А должно быть другое значение. Почему так? (settings.ini находится в той же папке, что и exe-файл)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог