QMap

目录

1、增加

2、删除

3、改

4、查找

5、转换


1、增加

 QMap<char,int> mapCI;

//插入
mapCI.insert('a',1);
mapCI.insertMulti('b',2);   //一键多值
mapCI.insertMulti('b',3);
qDebug() << mapCI;
//将QMap插入到另一个QMap中,同键值不会被覆盖
QMap<char,int> map1;
map1.insert('b',2);
map1.insert('c',4);
mapCI.unite(map1);
qDebug() << mapCI;

2、删除

mapCI.erase(mapCI.begin()); //删除第一个键值
qDebug() << mapCI;
mapCI.remove('b');  //删除 b 和他的值
qDebug() << mapCI;
mapCI.insert('c',4);
qDebug() << mapCI.take('c'); //移除键c,返回它的值

3、改

mapCI.insert('a',2); //会覆盖同一个键的值,作用等同修改

4、查找

QMap<char,int>::iterator it = mapCI.find('a'); //查找,返回迭代器
qDebug() << it.key() << it.value();
mapCI.insert('b',2);
qDebug(
Qt 中,清空 `QMap` 容器可以通过多种方法实现,具体取决于使用场景和资源管理方式。以下是几种常见方式: ### 使用 `clear()` 方法 `QMap` 提供了内置的 `clear()` 方法用于清空容器中的所有键值对。此方法不会释放与值相关联的资源(如动态分配的指针),但可以安全地用于普通值类型。 ```cpp QMap<int, QString> map; map.insert(1, "One"); map.insert(2, "Two"); map.clear(); // 清空容器 ``` ### 使用 `qDeleteAll()` 方法 如果 `QMap` 的值类型是指针类型(例如 `QMap<int, MyObject*>`),则可以使用 `qDeleteAll()` 函数来释放指针所指向的对象内存。需要注意,`qDeleteAll()` 仅适用于值类型为指针的情况,否则会引发编译错误。 ```cpp QMap<int, MyObject*> objectMap; objectMap.insert(1, new MyObject()); objectMap.insert(2, new MyObject()); qDeleteAll(objectMap); // 删除所有指针对象 objectMap.clear(); // 清空容器 ``` ### 手动删除指针值 如果希望在清空时对指针值进行更细粒度的控制,也可以通过遍历 `QMap` 手动删除每个指针值。 ```cpp QMap<int, MyObject*> objectMap; // 插入对象 for (auto it = objectMap.begin(); it != objectMap.end(); ++it) { delete it.value(); // 手动删除指针值 } objectMap.clear(); // 清空容器 ``` ### 使用智能指针管理资源 为了简化资源管理并避免内存泄漏,建议使用智能指针(如 `std::unique_ptr` 或 `std::shared_ptr`)作为 `QMap` 的值类型。这样,在容器清空时,智能指针会自动释放相关资源。 ```cpp #include <memory> QMap<int, std::shared_ptr<MyObject>> objectMap; objectMap.insert(1, std::make_shared<MyObject>()); objectMap.clear(); // 智能指针自动释放资源 ``` ### 使用隐式共享特性 `QMap` 支持隐式共享(Copy-On-Write),因此在赋值或拷贝时不会立即复制数据,直到需要修改时才会进行深拷贝。这一特性使得 `QMap` 在多线程环境中高效且安全[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值