Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись массива как значение в контейнере map ? 
V
    Опции темы
KOToR
Дата 3.2.2008, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 3.2.2008

Репутация: нет
Всего: нет




M
JackYF
Пользуемся кнопкой "Код". Отформатировал сообщение.


У меня такая проблема:

Нужно записать массив типа int (к примеру на 6 эл-тов) как знаение в контейнере map. Вот один из путей который я пробовал для реализации данной задачи:

Код

map <int,int*> my_map;
int* mas;
int key=15;
mas=new int [6];

for (int i=0;i<6;i++) 
     mas[i]=i;

my_map[key]=mas;//Так я записываю


//Далее пытаюсь прочитать:

Код

for (map<int,int*>::iterator it=my_map.begin(); it != my_map.end ();++it)
     {
    cout<<"First: "<<it->first<<endl<<"Second: ";

    for (int i=0;i<6;i++)    
         cout<<it->second[i]<<",";
    
    cout<<endl;
     }


Вот, что получаю в результате:

First: 15
Second: -842150451,-842150451,-842150451,-842150451,-842150451,-842150451,
Press any key to continue

Подскажите как правильно записать массив, чтобы получить правильные значения?

Это сообщение отредактировал(а) KOToR - 3.2.2008, 20:30
PM MAIL   Вверх
Sartorius
Дата 3.2.2008, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 2
Всего: 37



у меня все работает (VS2005)

PS покажи весть cpp-к целиком
PM MAIL ICQ   Вверх
JackYF
Дата 3.2.2008, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



KOToR, ты записываешь в контейнер только указатель, а не сам массив.
Поэтому тебе надо воспользоваться контейнером - boost::shared_array либо std::vector как вторым параметром для std::map.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
KOToR
Дата 3.2.2008, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 3.2.2008

Репутация: нет
Всего: нет



Все работает, прошу прощение за ложную тревогу!!! Дело в том, что здесь написал правильный код, а в самой программе цикл начинал не с нуля, а с другого значения (key=15 и в цикле начинал с нее), в результате чего значения не присваивались!!! Нужно всего-лишь быть более внимательным!!! Еще раз извиняюсь!!!
Вот работающий результат:

Код

First: 15
Second: 0,1,2,3,4,5,
Press any key to continue


 ! 
archimed7592
Не забываем пользоваться кнопкой "вопрос решён" или соответствующей галочкой в форме ответа.


Это сообщение отредактировал(а) archimed7592 - 3.2.2008, 20:42
PM MAIL   Вверх
JackYF
Дата 3.2.2008, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(Sartorius @  3.2.2008,  19:29 Найти цитируемый пост)
у меня все работает (VS2005)

Ага, пока ты не попытаешься удалить массиве между этими двумя вызовами. После чего указатель, хранящийся в std::map, станет недействительным.

Добавлено через 1 минуту и 25 секунд
эм...  smile ну если не пытаться удалять массив, будет работать и так... хотя и не очень правильно это.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
warmonger_
Дата 3.2.2008, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.7.2007
Где: г. Киев

Репутация: 1
Всего: 3



конечно не правильно. нужно использовать insert.
--------------------
Make everything as simple as possible, but not simpler.Albert Einstein
PM MAIL   Вверх
JackYF
Дата 3.2.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(warmonger_ @  3.2.2008,  20:19 Найти цитируемый пост)
нужно использовать insert. 

[key] по несуществующему key сделает insert.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
warmonger_
Дата 3.2.2008, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.7.2007
Где: г. Киев

Репутация: 1
Всего: 3



JackYF, действительно...
--------------------
Make everything as simple as possible, but not simpler.Albert Einstein
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0770 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.