Russian Qt Forum
Ноябрь 25, 2024, 03:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: QMap и масив  (Прочитано 14503 раз)
shadow
Гость
« : Февраль 12, 2016, 16:53 »

Доброго времени суток!

Подскажите пожалуйста можно реализовать добавление двумерного массива переменной длинны в словарь?
Пробую так:
Код:
float **Val = new float*[Size];
for (int i = 0; i < Size i++)
     Val[i]  = new float [Size];

   QMap<QString,float**> map;
   for (int i = 0; i < NumSost i++){

      for (int j = 0; j < Size j++)       
           Val[i][j]=....;
       
       map.insert(tr("%1").arg(i),Val)
   }

Не получается (наверное потому что Val указатель)

Подскажите пожалуйста решение?

Спасибо.

 
 
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Февраль 12, 2016, 17:30 »

Код
C++ (Qt)
QMap<QString, float *> map;
for (int i = 0; i < NumSost; i++) {
 
     for (int j = 0; j < Size; j++)      
          Val[i][j]=....;
 
      map.insert(tr("%1").arg(i), Val[i]);
}
Записан
shadow
Гость
« Ответ #2 : Февраль 12, 2016, 22:41 »

Код
C++ (Qt)
QMap<QString, float *> map;
for (int i = 0; i < NumSost; i++) {
 
     for (int j = 0; j < Size; j++)      
          Val[i][j]=....;
 
      map.insert(tr("%1").arg(i), Val[i]);
}
Возможно, но я же хочу по ключу получить весь масив Val?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Февраль 12, 2016, 22:58 »

так а смысл делать insert внутри цикла?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #4 : Февраль 12, 2016, 23:20 »

QMap <QString, QVector <QVector <float>>> my_map

 Но это оцтой, лучше вектора отдельно,  а в мапу указатели на них.
« Последнее редактирование: Февраль 12, 2016, 23:22 от Racheengel » Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Февраль 13, 2016, 07:35 »

Возможно, но я же хочу по ключу получить весь масив Val?
Тогда как было у Вас, только insert вне цикла. Не получится - выкладывайте пример (в zip файле)
Записан
shadow
Гость
« Ответ #6 : Февраль 13, 2016, 10:16 »

так а смысл делать insert внутри цикла?
Может пример не очень удачный...
Смысл в том что в цикле заполняется масив Val[][], а потом добавляется в словарь.
Потом я хочу по ключу получить Val...
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Февраль 13, 2016, 12:38 »

Потом я хочу по ключу получить Val...
Допустим все построено, приведите строку как Вы хотите использовать
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Февраль 13, 2016, 16:47 »

так а смысл делать insert внутри цикла?
Может пример не очень удачный...
Смысл в том что в цикле заполняется масив Val[][], а потом добавляется в словарь.
Потом я хочу по ключу получить Val...
просто insert надо вне цикла сделать и все
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
shadow
Гость
« Ответ #9 : Февраль 15, 2016, 15:48 »

так а смысл делать insert внутри цикла?
Может пример не очень удачный...
Смысл в том что в цикле заполняется масив Val[][], а потом добавляется в словарь.
Потом я хочу по ключу получить Val...
просто insert надо вне цикла сделать и все
Да если одно состояние то это работает(insert вне цикла), но у меня NumSost много (ключей ~30) и для каждого свой массив заполняется.
Может тогда принципиально мне подскажите как реализовать лучше...
У меня была прога на С
в которой для сохранения массивов значений использовалась структура
Код:
struct Values
{
val[200][200];
val1[200][200];
..
}
и вместо insert записывалась на диск (в bdb) для каждого состояния;
Но в структуре массивы статические и я захотел все это дело поправить и перевести на С++...
Я думал что засовывая массив в словарь туда записывается вся память выделена под массива, а туда записывается только указатель на массив Грустный....

Спасибо!

 
Записан
shadow
Гость
« Ответ #10 : Февраль 15, 2016, 20:02 »

Потом я хочу по ключу получить Val...
Допустим все построено, приведите строку как Вы хотите использовать

Код:
Val = map.find(sost).values(0);
Val2= map.find(sost+1).values(0);
...
      res = Val[][] - Val2[][]
....
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Февраль 16, 2016, 08:18 »

Но в структуре массивы статические и я захотел все это дело поправить и перевести на С++...
Правильно, от такого старья нужно избавляться

Допустим все построено, приведите строку как Вы хотите использовать
Код:
Val = map.find(sost).values(0);
Val2= map.find(sost+1).values(0);
...
      res = Val[][] - Val2[][]
....
Такое использование просто ужасно, так Val и Val2 будут КОПИРОВАТЬСЯ. Задачка не так уж проста (если делать по уму). Я подумаю как лучше.

Уточните: вот этот размер 200x200 - он фиксирован/необходим или просто "забивается по максимуму"? Напр реально там эл-тов всего 10x10, остальное неиспользуемые нули (значение по умолчанию)
Записан
shadow
Гость
« Ответ #12 : Февраль 16, 2016, 08:53 »

Цитировать
Уточните: вот этот размер 200x200 - он фиксирован/необходим или просто "забивается по максимуму"? Напр реально там эл-тов всего 10x10, остальное неиспользуемые нули (значение по умолчанию)
У меня есть бинарные файлы данных, при открытии бинарника я узнаю размер массива, так что 200х200 может изменятся, это должен быть динамический массив.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #13 : Февраль 16, 2016, 09:04 »

У меня есть бинарные файлы данных, при открытии бинарника я узнаю размер массива, так что 200х200 может изменятся, это должен быть динамический массив.
Лучше сделать отдельный класс для хранения данных файла, например, FileData. В нем будут храниться размерность данных и сами данные, а также методы их сравнения и модификации. А вот объекты этого класса можно уже класть в QMap.
Записан
shadow
Гость
« Ответ #14 : Февраль 16, 2016, 09:22 »

У меня есть бинарные файлы данных, при открытии бинарника я узнаю размер массива, так что 200х200 может изменятся, это должен быть динамический массив.
Лучше сделать отдельный класс для хранения данных файла, например, FileData. В нем будут храниться размерность данных и сами данные, а также методы их сравнения и модификации. А вот объекты этого класса можно уже класть в QMap.
Я только читаю данные с бинарников ничего туда не пишу.
Или я Вас неправильно понял?
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.196 секунд. Запросов: 22.