Название: QMap и масив Отправлено: shadow от Февраль 12, 2016, 16:53 Доброго времени суток!
Подскажите пожалуйста можно реализовать добавление двумерного массива переменной длинны в словарь? Пробую так: Код: float **Val = new float*[Size]; Не получается (наверное потому что Val указатель) Подскажите пожалуйста решение? Спасибо. Название: Re: QMap и масив Отправлено: Igors от Февраль 12, 2016, 17:30 Код
Название: Re: QMap и масив Отправлено: shadow от Февраль 12, 2016, 22:41 Код
Название: Re: QMap и масив Отправлено: kambala от Февраль 12, 2016, 22:58 так а смысл делать insert внутри цикла?
Название: Re: QMap и масив Отправлено: Racheengel от Февраль 12, 2016, 23:20 QMap <QString, QVector <QVector <float>>> my_map
Но это оцтой, лучше вектора отдельно, а в мапу указатели на них. Название: Re: QMap и масив Отправлено: Igors от Февраль 13, 2016, 07:35 Возможно, но я же хочу по ключу получить весь масив Val? Тогда как было у Вас, только insert вне цикла. Не получится - выкладывайте пример (в zip файле)Название: Re: QMap и масив Отправлено: shadow от Февраль 13, 2016, 10:16 так а смысл делать insert внутри цикла? Может пример не очень удачный...Смысл в том что в цикле заполняется масив Val[][], а потом добавляется в словарь. Потом я хочу по ключу получить Val... Название: Re: QMap и масив Отправлено: Igors от Февраль 13, 2016, 12:38 Потом я хочу по ключу получить Val... Допустим все построено, приведите строку как Вы хотите использоватьНазвание: Re: QMap и масив Отправлено: kambala от Февраль 13, 2016, 16:47 так а смысл делать insert внутри цикла? Может пример не очень удачный...Смысл в том что в цикле заполняется масив Val[][], а потом добавляется в словарь. Потом я хочу по ключу получить Val... Название: Re: QMap и масив Отправлено: shadow от Февраль 15, 2016, 15:48 так а смысл делать insert внутри цикла? Может пример не очень удачный...Смысл в том что в цикле заполняется масив Val[][], а потом добавляется в словарь. Потом я хочу по ключу получить Val... Может тогда принципиально мне подскажите как реализовать лучше... У меня была прога на С в которой для сохранения массивов значений использовалась структура Код: struct Values Но в структуре массивы статические и я захотел все это дело поправить и перевести на С++... Я думал что засовывая массив в словарь туда записывается вся память выделена под массива, а туда записывается только указатель на массив :(.... Спасибо! Название: Re: QMap и масив Отправлено: shadow от Февраль 15, 2016, 20:02 Потом я хочу по ключу получить Val... Допустим все построено, приведите строку как Вы хотите использоватьКод: Val = map.find(sost).values(0); Название: Re: QMap и масив Отправлено: Igors от Февраль 16, 2016, 08:18 Но в структуре массивы статические и я захотел все это дело поправить и перевести на С++... Правильно, от такого старья нужно избавлятьсяДопустим все построено, приведите строку как Вы хотите использовать Код: Val = map.find(sost).values(0); Уточните: вот этот размер 200x200 - он фиксирован/необходим или просто "забивается по максимуму"? Напр реально там эл-тов всего 10x10, остальное неиспользуемые нули (значение по умолчанию) Название: Re: QMap и масив Отправлено: shadow от Февраль 16, 2016, 08:53 Цитировать Уточните: вот этот размер 200x200 - он фиксирован/необходим или просто "забивается по максимуму"? Напр реально там эл-тов всего 10x10, остальное неиспользуемые нули (значение по умолчанию) У меня есть бинарные файлы данных, при открытии бинарника я узнаю размер массива, так что 200х200 может изменятся, это должен быть динамический массив.Название: Re: QMap и масив Отправлено: Old от Февраль 16, 2016, 09:04 У меня есть бинарные файлы данных, при открытии бинарника я узнаю размер массива, так что 200х200 может изменятся, это должен быть динамический массив. Лучше сделать отдельный класс для хранения данных файла, например, FileData. В нем будут храниться размерность данных и сами данные, а также методы их сравнения и модификации. А вот объекты этого класса можно уже класть в QMap. Название: Re: QMap и масив Отправлено: shadow от Февраль 16, 2016, 09:22 У меня есть бинарные файлы данных, при открытии бинарника я узнаю размер массива, так что 200х200 может изменятся, это должен быть динамический массив. Лучше сделать отдельный класс для хранения данных файла, например, FileData. В нем будут храниться размерность данных и сами данные, а также методы их сравнения и модификации. А вот объекты этого класса можно уже класть в QMap. Или я Вас неправильно понял? Название: Re: QMap и масив Отправлено: Old от Февраль 16, 2016, 10:27 Я только читаю данные с бинарников ничего туда не пишу. Пожалуйста, а как это соотносится с хранением данных?Или я Вас неправильно понял? Вы пытаетесь засунуть их в обычный массив, этот массив в map, а где будете хранить размерности массивов? А я предлагаю это объединить в отдельную сущность с удобными методами их использования. Название: Re: QMap и масив Отправлено: shadow от Февраль 16, 2016, 11:37 Я только читаю данные с бинарников ничего туда не пишу. Пожалуйста, а как это соотносится с хранением данных?Или я Вас неправильно понял? Вы пытаетесь засунуть их в обычный массив, этот массив в map, а где будете хранить размерности массивов? А я предлагаю это объединить в отдельную сущность с удобными методами их использования. А вообще получилось спасибо! Код: class FileData Код: #include <QDebug> Хочу вместо цикла использовать memcpy но программа вываливается... в чем может быть проблема? Или по производительности это будет то-же самое? Название: Re: QMap и масив Отправлено: Igors от Февраль 16, 2016, 12:08 Хочу вместо цикла использовать memcpy но программа вываливается... в чем может быть проблема? У Вас каждая строка распределена отдельно, поэтому memcpy не прокатит. Вы сделали "косметический ремонт", старые си-шные массивы-то остались, Вы будете продолжать разбивать о них ноги (массив создан! Ах нет, не создан). Вот Вам заготовочка в аттаче. Если я где ошибся - подправите. Также избегайте всяких QMap::value() и др методов возвращающих ПО ЗНАЧЕНИЮ (не слушайте если будут рассказывать что, мол, в Qt так можно и.т.п.) Название: Re: QMap и масив Отправлено: shadow от Февраль 16, 2016, 12:26 Цитировать У Вас каждая строка распределена отдельно, поэтому memcpy не прокатит. Не понял, там и там указатель, память выделена.Цитировать Вы сделали "косметический ремонт" , старые си-шные массивы-то остались Но массивы теперь динамические?Аттач посмотрел... Ну мне чтобы это понять еще надо подтянуть матчасть.... Название: Re: QMap и масив Отправлено: __Heaven__ от Февраль 16, 2016, 12:38 Не понял, там и там указатель, память выделена. Указатель на что (тип) ?Название: Re: QMap и масив Отправлено: kambala от Февраль 16, 2016, 13:14 Также избегайте всяких QMap::value() и др методов возвращающих ПО ЗНАЧЕНИЮ (не слушайте если будут рассказывать что, мол, в Qt так можно и.т.п.) если в словарь складывать указатели, то можно и value()Название: Re: QMap и масив Отправлено: shadow от Февраль 16, 2016, 13:36 Не понял, там и там указатель, память выделена. Указатель на что (тип) ?Название: Re: QMap и масив Отправлено: __Heaven__ от Февраль 16, 2016, 13:56 На float. А если повнимательнее :) на какой тип указывает Kvdop?Название: Re: QMap и масив Отправлено: shadow от Февраль 16, 2016, 15:38 На float. А если повнимательнее :) на какой тип указывает Kvdop?Название: Re: QMap и масив Отправлено: __Heaven__ от Февраль 16, 2016, 16:26 Да. Давайте для упрощения будем называть Kvdop массивом указателей (на float).
Теперь смотрите на memcpy. Эта функция копирует информацию из массива А в массив Б. Как мы видим, в массиве Kvdop хранятся указатели. Значит что мы копируем? Верно, указатели вместо желаемых float. Но это полбеды. Вы в memcpy передаёте количество элементов, которое хотите скопировать, а на самом деле она ожидает количество байт подлежащие копированию. Функция memcpy, конечно же, мощная, но она потенциально опасная. Поэтому, если у вас нет острой необходимости в повышении скорости, то от неё лучше отказаться. Очень советую обратить внимание на замечания Old. Если бы передо мной стояла такая задача, то я бы написал класс матрицы, либо воспользовался готовым извне. Название: Re: QMap и масив Отправлено: shadow от Февраль 16, 2016, 16:31 Да. Давайте для упрощения будем называть Kvdop массивом указателей (на float). Теперь смотрите на memcpy. Эта функция копирует информацию из массива А в массив Б. Как мы видим, в массиве Kvdop хранятся указатели. Значит что мы копируем? Верно, указатели вместо желаемых float. Но это полбеды. Вы в memcpy передаёте количество элементов, которое хотите скопировать, а на самом деле она ожидает количество байт подлежащие копированию. Функция memcpy, конечно же, мощная, но она потенциально опасная. Поэтому, если у вас нет острой необходимости в повышении скорости, то от неё лучше отказаться. Очень советую обратить внимание на замечания Old. Если бы передо мной стояла такая задача, то я бы написал класс матрицы, либо воспользовался готовым извне. Спасибо за совет надо подумать... Название: Re: QMap и масив Отправлено: __Heaven__ от Февраль 16, 2016, 16:34 Я, кстати, так и не понял, почему вы QMap используете. В чём выгода?
Название: Re: QMap и масив Отправлено: Igors от Февраль 16, 2016, 16:37 Я, кстати, так и не понял, почему вы QMap используете. В чём выгода? Нормально если каких-то массивов может не оказаться (напр не загрузились) Название: Re: QMap и масив Отправлено: shadow от Февраль 16, 2016, 17:36 Я, кстати, так и не понял, почему вы QMap используете. В чём выгода? Ну я новичок. Может поэтому...Выгода в простоте для меня. QMap первым попался, может QVector лучше я пока не знаю. А вообще я выше писал, что раньше я писал структуру на диск... это напряжно и я захотел от этого избавится...обратился за помощью к джедаям..:)Название: Re: QMap и масив Отправлено: shadow от Февраль 16, 2016, 17:38 Я, кстати, так и не понял, почему вы QMap используете. В чём выгода? Нормально если каких-то массивов может не оказаться (напр не загрузились) Ненормально конечно. Название: Re: QMap и масив Отправлено: __Heaven__ от Февраль 16, 2016, 17:40 Да, скорее всего, вектор и нужен. QVector<Matrix>
С map слишком мудрёно получается, тем более, переводя порядковый номер в QString Название: Re: QMap и масив Отправлено: Igors от Февраль 16, 2016, 17:52 Ненормально конечно. Я не о том. Мапа имеет смысл если Вы хотите избежать множества переменных (для каждого массива). Насколько я понял, в этом и был Ваш замысел. Конечно то же самое можно с вектором массивов, но менее удобно. Напр если какого-то массива может и не быть - с вектором довольно муторно. Но все это уже вопрос "как организовать/хранить набор массивов". Сначала надо иметь нормальный класс массива вместо старых огрызков.Ну мне чтобы это понять еще надо подтянуть матчасть.... А Вам и так и так ее подтягивать если связались с Qt, а там классы куда сложнее Название: Re: QMap и масив Отправлено: poru от Февраль 16, 2016, 18:38 То что вы хотели в самом начале делается через линейный динамический массив и приведение типа указателей к многомерному массиву.
Код
PS: Цитировать Я думал что засовывая массив в словарь туда записывается вся память выделена под массива, а туда записывается только указатель на массив не доглядел про это условиеНазвание: Re: QMap и масив Отправлено: shadow от Февраль 16, 2016, 20:47 Цитировать Я не о том. Мапа имеет смысл если Вы хотите избежать множества переменных (для каждого массива). Насколько я понял, в этом и был Ваш замысел. да именно ето я и хотелНу мне чтобы это понять еще надо подтянуть матчасть.... Цитировать А Вам и так и так ее подтягивать если связались с Qt, а там классы куда сложнее Да, конечно... |