Я конвертирую Perl-программу в Qt / C ++.Большая часть кода имеет прямое преобразование в функцию C ++ или Qt.Однако я не уверен, как перенести хэш Perl-хэшей.
Вот пример многоуровневых хэшей, которые я использую для организации некоторых данных
$series{$uid}{$studynum}{$seriesnum}{'exportseriesid'} = $exportseriesid;
$series{$uid}{$studynum}{$seriesnum}{'seriesid'} = $seriesid;
$series{$uid}{$studynum}{$seriesnum}{'subjectid'} = $subjectid;
$series{$uid}{$studynum}{$seriesnum}{'studyid'} = $studyid;
$series{$uid}{$studynum}{$seriesnum}{'modality'} = $modality;
Я использовалQHash для создания одноуровневых хэшей, таких как
QHash<QString, QString> cfg;
int n = cfg["threads"].toInt();
Существует ли метод, аналогичный C ++ или использующий QHash?
ОБНОВЛЕНИЕ:
Iв конечном итоге использовать вложенные QMaps.QMap автоматически сортируется по ключу при его итерации, а QHash нет.Вот код, который я в конечном итоге использовал
/* create a multilevel hash s[uid][study][series]['attribute'] */
QMap<QString, QMap<int, QMap<int, QMap<QString, QString>>>> s;
/* iterate through the UIDs */
for(QMap<QString, QMap<int, QMap<int, QMap<QString, QString>>>>::iterator a = s.begin(); a != s.end(); ++a) {
QString uid = a.key();
/* iterate through the studynums */
for(QMap<int, QMap<int, QMap<QString, QString>>>::iterator b = s[uid].begin(); b != s[uid].end(); ++b) {
int studynum = b.key();
/* iterate through the seriesnums */
for(QMap<int, QMap<QString, QString>>::iterator c = s[uid][studynum].begin(); c != s[uid][studynum].end(); ++c) {
int seriesnum = c.key();
int exportseriesid = s[uid][studynum][seriesnum]["exportseriesid"].toInt();
/* etc... */
}
}
}