如何正确定义及使用存储QMap<QString,QString>元素的QVector
问题原因
你声明的QVector<QMap<QString, QString>> x初始为空,没有任何元素,直接通过下标[0]、[1]访问未分配的位置会触发数组越界错误,这就是代码运行报错的核心原因。
正确实现方式
你可以根据使用场景选择以下任意一种实现方案:
- 方法1:先调用
append()追加空QMap元素,再操作对应位置的元素
QVector<QMap<QString, QString>> x; // 追加第一个空QMap元素 x.append(QMap<QString, QString>()); x[0].insert("name", "jim"); x[0].insert("lname", "helpert"); // 追加第二个空QMap元素 x.append(QMap<QString, QString>()); x[1].insert("name", "dwight"); x[1].insert("lname", "schrute");
- 方法2:预先分配vector容量后再通过下标操作
// 初始化时直接指定vector包含2个空QMap元素 QVector<QMap<QString, QString>> x(2); x[0].insert("name", "jim"); x[0].insert("lname", "helpert"); x[1].insert("name", "dwight"); x[1].insert("lname", "schrute");
如果是已经声明过的vector,也可以调用x.resize(2)分配对应数量的元素后再用下标访问。
- 方法3:使用初始化列表直接构造(Qt5及以上版本支持,代码更简洁)
QVector<QMap<QString, QString>> x = { {{"name", "jim"}, {"lname", "helpert"}}, {{"name", "dwight"}, {"lname", "schrute"}} };
内容的提问来源于stack exchange,提问作者Seyed Mahdi Jalali
相关产品推荐
相关产品推荐

