qt qmap<int,string>的使用,遍历删除数据
时间: 2024-10-20 08:15:36 浏览: 229
在Qt中,`QMap<int, QString>`是一个关联容器,它存储了键值对,其中键是整型(int),值是字符串(QString)。如果你想遍历这个映射并删除某些元素,可以按照以下步骤操作:
1. 创建和初始化QMap:
```cpp
QMap<int, QString> map;
map.insert(1, "Value1");
map.insert(2, "Value2");
map.insert(3, "Value3");
```
2. 遍历QMap并删除元素:
Qt提供了一种迭代器的方式来遍历QMap。首先获取迭代器:
```cpp
for (auto it = map.begin(); it != map.end(); ) {
if (/* 按照条件判断是否需要删除,例如如果需要删除值为"Value2"的项 */) {
it = map.erase(it); // 使用erase删除元素,然后迭代器自动移动到下一个元素
} else {
++it; // 如果不需要删除,就直接移到下一个元素
}
}
```
注意,`erase`会返回新的迭代器,所以你需要更新迭代器的位置。如果你在`erase`之后不更新迭代器,可能会跳过一些元素。
相关问题
void MainWindow::addPortToCombo() { /*get com port*/ QList<USBPortInfoStruct> list_port=portManager->deleteOfflineUsbVirtualPort(); ui->comboBox->clear(); portNumber = 0; QString diagPort; QString nmeaPort; if(list_port.size()>0){ int i = 0; for(i=0; i<list_port.size(); i++) { if(list_port[i].friendly_name.indexOf("AT") != -1) { this->portString = getPort(list_port[i].friendly_name).toLatin1().data(); portNumber++; ui->comboBox->addItem("AT Port "+portString); return; } if(list_port[i].friendly_name.indexOf("Diagnostics") != -1) { ui->comboBox->addItem(list_port[i].friendly_name); diagPort = getPort(list_port[i].friendly_name).toLatin1().data(); } else if(list_port[i].friendly_name.indexOf("NMEA") != -1) { ui->comboBox->addItem(list_port[i].friendly_name); nmeaPort = getPort(list_port[i].friendly_name).toLatin1().data(); } } } /*get Regedit port*/ QMap<QString,QString>keyComMap = portManager->getKeyComMap(); ui->comboBox->clear(); portNumber = 0; QMap<QString,QString>::iterator it; //遍历map for ( it = keyComMap.begin(); it != keyComMap.end(); ++it ) { if (it.key().indexOf("QCUSB")!=-1 && it.value()!=diagPort && it.value()!=nmeaPort) { portNumber++; portString = it.value(); ui->comboBox->addItem("Modem "+portString); break; } } }啥意思
这段代码是一个 Qt 程序中的一个函数,用于向下拉框控件中添加串口列表。首先通过 portManager 对象获取已连接的 USB 串口信息,然后根据串口的 friendly_name 属性判断出 AT、Diagnostics 和 NMEA 三种串口类型,并分别添加到下拉框中。如果没有 AT 类型的串口,则从 Diagnostics 和 NMEA 串口中任选一个添加到下拉框中。接着通过 portManager 对象获取注册表中的串口信息,并从中筛选出 QCUSB 类型的串口,并添加到下拉框中。最后通过 ui->comboBox->addItem() 函数向下拉框中添加串口信息。其中,portString、portNumber、diagPort 和 nmeaPort 是该函数中定义的变量。
C++ 实现QMap逆向遍历
QMap 是 Qt 中提供的一个关联容器,它提供了快速的查找和插入操作。QMap 中的元素是按照键排序的,因此可以直接使用迭代器进行正向遍历。如果要进行逆向遍历,可以使用 QMap 的 rbegin() 和 rend() 函数来获取反向迭代器,然后使用迭代器的递减操作符进行遍历。
下面是使用 C++ 实现 QMap 的逆向遍历的示例代码:
```c++
#include <iostream>
#include <QMap>
int main()
{
QMap<int, std::string> map;
map.insert(1, "one");
map.insert(2, "two");
map.insert(3, "three");
// 逆向遍历
for (auto it = map.rbegin(); it != map.rend(); ++it) {
std::cout << it.key() << ": " << it.value() << std::endl;
}
return 0;
}
```
在上面的示例代码中,首先定义了一个 QMap 对象,并向其中插入了三个键值对。然后使用反向迭代器进行逆向遍历,输出每个键和对应的值。注意,使用迭代器的 key() 和 value() 函数可以分别获取迭代器指向的键和值。
阅读全文