如何通过按键正确地从地图中删除一个项目?
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;
有这样一个任务:按键删除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;