qmap获取键值
时间: 2025-03-07 16:11:30 浏览: 45
在Qt框架中,`QMap<Key, T>` 提供了多种方法来获取键值对的信息。下面将详细介绍几种常见的访问和操作 `QMap` 键值的方式。
### 获取指定键对应的值
当你已经有了某个具体的键,并希望得到它所对应的那个值的时候,你可以通过以下三种常用的方式来实现:
1. **使用 value() 函数**
这是最简单直接的一种做法。如果给定的键存在于映射表内,则返回其关联的数据项;若不存在则会给出默认构造出来的T类型实例或者传入自定义的缺省值。
```cpp
QString result = myMap.value(key); // 若 key 存在于myMap 中,则取之;否则result为空字符串(假设T为QString)
```
如果你想提供一个备用值以防备找不到匹配的情况发生的话还可以这样做:
```cpp
int defaultValue = -1;
int foundValue = myMap.value("someKey", defaultValue);
// 当 "someKey" 未找到时,foundValue 被设为defaultValue(-1)
```
2. **利用 [] 操作符 (operator[])**
这种方法同样能够读取或修改已存在的条目,但它对于非const版本会在找不到对应entry的情况下自动插入一条记录并将其value置成T类型的初始状态。因此仅推荐用作查询现有成员的操作上加 const 强制转换限制:
```cpp
const int existingValue = static_cast<const QMap<QString,int>&>(myMap)["knownKey"];
// 或者更简便地写作:
const auto& anotherWayToAccessExistingData = myMap["anotherKnownKey"];
```
需要注意的是,上述代码中的强制转换是为了避免意外添加新元素到map里边去——因为如果不这么做而是直接使用非const引用形式的话就可能会导致这种情况的发生。
3. **借助 find()/contains() 成员函数进行迭代查找**
如果你不仅仅满足于简单的get/set动作而且还需要做一些额外判断之类的任务,那么就可以考虑采取这种方式来进行更为精细控制下的检索工作了.
先检查是否存在目标key:
```cpp
if(myMap.contains(searchedForKey)){
qDebug()<<"The searched for key does exist!";
}else{
qDebug()<<"Not Found.";
}
```
然后定位具体的iterator位置信息以便进一步处理:
```cpp
auto iter=myMap.find(desired_key);
if(iter!=myMap.end()){
qDebug()<<*iter; // 输出对应的pair对象
qDebug()<<iter.key(); // 只输出key部分
qDebug()<<iter.value(); // 只输出value部分
} else {
qDebug()<<"No such element";
}
```
### 遍历所有键值对
除了单独提取某一项外,有时候我们也希望能够一次性拿到所有的键及其配对的结果出来做统一展示或者其他用途。这时候可以依靠 foreach 循环或是范围for循环配合begin/end迭代器完成这项使命 :
**Foreach风格**
```cpp
foreach(const QString &key, myStringIntMap.keys()) {
qDebug()<<key<<": "<<myStringIntMap[key];
}
```
**Range-based For Loop(C++11及以上)**
```cpp
for(auto&& [k,v]: myMap){
qDebug()<< k << ": " << v ;
}
```
亦或者是传统一些的做法即基于STL式的迭代模式:
```cpp
QMapIterator<QString, QVariant> i(myMixedTypeMap);
while(i.hasNext())
{
i.next();
qDebug()<<i.key()<<":"<<i.value();
}
```
以上就是关于从`QMap`当中获取键值的一些基本技巧啦!
阅读全文
相关推荐


















