map 是一种数据容器,它提供一种由key 到 value 的映射。
map 的key 是唯一的, 也是有序的。map 通常由近似平衡的红黑树来实现。
key 的有序性,使得插入,查找节点比较有效。map 的操作(增删改查),通常就是
对节点的操作(增删改查)。当然,map 也有创建(new)和销毁(delete)操作。
QMap 是Qt 实现的一种map, 与c++ stl map 使用方法一致。
QMap 的增删改查,
程序简单,就直接上代码了,附上运行结果。
#include <QDebug>
void showmap(QString str);
QMap<int, int> map;
int main(int argc, char *argv[])
{
(void) argc;
(void)argv;
QMap<int, int>::iterator it;
//增加
map.insert(1, 100);
map.insert(2, 200);
map.insert(3, 300);
map.insert(4, 400);
map.insert(5, 500);
map.insert(6, 600);
showmap("orig");
//QMap的Key会自动按升序排列
//删除
it=map.begin()+1;
map.erase(it);
showmap("delete 2");
//修改
map[5]=1000;
showmap("change 5");
//查询
it = map.find(7);
if( it != map.end())
{
//你可以在这里删除
qDebug() << "find " << it.key() <<"\t" << it.value();
}
//it 删除安全吗?
for(it=map.begin();it!=map.end();it++)
{
if((it.key() % 2) ==0) map.erase(it);
}
showmap("safe erase even key");
return 0;
}
void showmap(QString str)
{
qDebug()<<QString("------ %1 --------").arg(str);
QMap<int, int>::iterator it;
for( it=map.begin(); it!=map.end(); it++)
qDebug() << it.key() <<"\t" << it.value();
}
./test2
"------ orig --------"
1 100
2 200
3 300
4 400
5 500
6 600
"------ delete 2 --------"
1 100
3 300
4 400
5 500
6 600
"------ change 5 --------"
1 100
3 300
4 400
5 1000
6 600
"------ safe erase even key --------"
1 100
3 300
5 1000