#c #qt #qmap #qvector
Вопрос:
Я хочу иметь QVector QMap. Я использовал этот синтаксис:
QVector<QMap<QString, QString>> x;
x[0].insert("name", "jim");
x[0].insert("lname", "helpert");
x[1].insert("name", "dwight");
x[1].insert("lname", "schrute");
но это не работает:
Я был бы признателен, если бы кто — нибудь указал мне правильный формат.
Комментарии:
1. Что такое
d
? Я вижу переменную с именемx
. Кроме того, пожалуйста, будьте более конкретны, что означает «это не работает». Не компилируется? Работает неправильно?2. Я исправил имя переменной:) также добавил изображение. надеюсь, это ясно.
3. Какие функции используются для добавления элементов в a
QVector
? Вызываете ли вы какую-либо из этих функций, чтобы добавить запись в вектор? Я не являюсь пользователемQVector
, но если это что-то подобноеstd::vector
, вы не добавляете элементы с помощью[ ]
.4. верно. моя вина. Спасибо
Ответ №1:
Ошибка «Индекс вне диапазона» возникает из-за того, что вы пытаетесь получить доступ к элементу вектора, которого не существует. Вместо доступа к определенному индексу/элементу массива было бы лучше сначала создать QMap за пределами QVector, а затем x.push_back(map)
, чтобы карта была счастливо размещена в задней части QVector.
Аналогичная вещь применима к обычному C , std::vector
когда вам нужно либо push_back
или emplace_back
данные на вектор
Ответ №2:
Вы получаете «Индекс вне диапазона», потому что вы обращаетесь к пустому QVector. Сначала вам нужно вставить элементы QMap в QVector. Затем вы можете получить доступ к x[0] -> для первой QMap с 0-м индексом, x[1] — > > для второй QMap с 1-м индексом……. Создайте объект QMap. Вставьте в него элементы. Сделайте объект QVector. Вставьте этот объект QMap в этот QVector. Прочитайте документы и используйте соответствующие функции для этого https://doc.qt.io/archives/qt-4.8/