如何通过按键正确地从地图中删除一个项目?

How to correctly remove an item from the map by key?

有这样一个任务:按键删除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”

请告诉我哪里出了问题?

关于QMap::value(const Key)的参考:

Returns the value associated with the key key.

If the map contains no item with key key, the function returns a default-constructed value. If there are multiple items for key in the map, the value of the most recently inserted one is returned.

地图的初始大小为 6,在移除项目后 key = 3 地图的大小为 5。您从 0 迭代到 5,然后 value(3) 构造默认 QString 对象,因为项目有 3因为键不存在,所以你看到“”作为输出。 所以你的问题是迭代次数与地图中的键不匹配。

使用迭代器打印地图:

for (auto it = map.begin(); it != map.end(); ++it)
  cout << it.value() << endl;