LINUX.ORG.RU

Вопросы по QMap

 


0

1

Начал вот изучение qt/c++ ну и тут возник вопрос:
У меня есть вот такое

 QMap<QString, QMap<QString, int>*> secondMap;
 int m;
 int n = qrand() % 5;

 for (int i = 0; i < n; i++)
 {
    //тут как бы должен создаваться новый обьект
    //вписал сюда лишь для наглядности, ибо так не правильно
    //QMap<QString, int> firstMap;
    //

    m = qrand() % 5;
    for (int k = 0; k < m; k++)
    {
       firstMap.insert(QString::number(k),k);
    }
    secondMap.insert(QString::number(i), &firstMap);
 }

secondMap получает один и тот же указатель

QMap(("0", 0x7fffa1982e50)("1", 0x7fffa1982e50)("2", 0x7fffa1982e50))
Теперь вопрос: Есть ли какая нибудь возможность создавать обьекты вот такого вида заранее не зная количество вложеных qmap<qstring, int>?
((QString, ((QString, int)
            (QString, int)))
 (QString, ((QString, int)
            (QString, int)
            (QString, int))))

P.S. сразу сори если не очень внятно описал проблему,

Deleted

Так?

QMap<QString, QMap<QString, int>*> secondMap;
    int m;
    int n = qrand() % 5;

    for (int i = 0; i < n; i++)
    {
       m = qrand() % 5;
       secondMap.insert(QString::number(i), new QMap<QString,int>);
       for (int k = 0; k < m; k++)
       {
          secondMap[QString::number(i)]->insert(QString::number(k),k);
       }
    }

Или

QMap<QString, QMap<QString, int>*> secondMap;
    int m;
    int n = qrand() % 5;

    for (int i = 0; i < n; i++)
    { 
       QMap<QString, int>* firstMap = new QMap<QString, int>;
       m = qrand() % 5;
       for (int k = 0; k < m; k++)
       {
          firstMap->insert(QString::number(k),k);
       }
       secondMap.insert(QString::number(i), firstMap);

    }
keyran ★★
()

Да, собственно QMap это и реализует.

Begemoth ★★★★★
()
Ответ на: комментарий от keyran

QMap<QString, QMap<QString, int>*> secondMap;

QMap<QString, int>*

С Си не наигрались? Зачем тут указатель? QMap<QString, QMap<QString, int>> гораздо лучше:

m = qrand() % 5;
for (int k = 0; k < m; k++)
  secondMap[QString::number(i)][QString::number(k)] = k;

Плюс автоматически будет освобождена вся использованная память без написания какого-либо дополнительного кода.

Begemoth ★★★★★
()
Последнее исправление: Begemoth (всего исправлений: 1)
Ответ на: комментарий от Begemoth

По условию ТС. Зачем тут указатель, я и сам не знаю.

keyran ★★
()
Ответ на: комментарий от Deleted

Разница в том, что тогда на каждом проходе цикла будет создаваться в куче новый объект.

keyran ★★
()
Ответ на: комментарий от Begemoth

да блин, я до этого стрелки слитно писал, он мне ошибку и выдовал, поэтому я туда указатель и всунул, а ща попробовал через пробел «> >» написать, все пошло....

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.