有一个任务:通过键从QMap中删除项目。
我用这段代码来做到这一点。
QMap <int, QString> map;
map.insert(0, "0");
map.insert(1, "1");
map.insert(2, "2");
map.insert(3, "3");
map.insert(4, "4");
map.insert(5, "5");
qDebug() << "Before:";
for (auto i = 0; i < map.size(); i++)
qDebug() << map.value(i) << "\t";
qDebug() << "--------------";
map.remove(3);
qDebug() << "After:";
for (auto i = 0; i < map.size(); i++)
qDebug() << map.value(i) << "\t";
我得到以下结果:
之前: “ 0” “ 1” “ 2” “ 3” “ 4” “ 5”
之后: “ 0” “ 1” “ 2” ” “ 4”
但是我希望结果是:
之前: “ 0” “ 1” “ 2” “ 3” “ 4” “ 5”
之后:
“ 0” “ 1” “ 2” “ 4” “ 5”
请告诉我怎么了?
答案 0 :(得分:4)
关于QMap::value(const Key)
的参考文献:
返回与键相关的值。
如果地图不包含带有键的项,则该函数返回 默认构造的值。如果有多个项目要输入 映射,则返回最近插入的一个的值。
映射的初始大小为6,在删除映射大小为key = 3
的项为5后。您要从0迭代到5,然后value(3)
构造默认的QString对象,因为以3为键的项不存在,这就是为什么您看到“”作为输出的原因。
因此,您的问题是迭代次数与地图中的键不匹配。
使用迭代器打印地图:
for (auto it = map.begin(); it != map.end(); ++it)
cout << it.value() << endl;