C++中QMap读取配置文件里面的数据,采用for循环遍历,判断数据属于哪个区间,然后输出
时间: 2024-02-17 17:05:10 浏览: 133
你的问题和上一个问题几乎一样,只是语言不同,答案也基本相同。以下是使用C++语言的示例代码:
假设我们有一个配置文件,里面包含以下内容:
```
[Section1]
key1=10
key2=20
key3=30
[Section2]
key1=40
key2=50
key3=60
[Section3]
key1=70
key2=80
key3=90
```
我们可以使用fstream来读取配置文件,并将数据存储到QMap中:
```
#include <fstream>
#include <sstream>
#include <QMap>
QMap<QString, QMap<int, QVariant>> readConfigFile(const std::string& fileName) {
std::ifstream file(fileName);
QMap<QString, QMap<int, QVariant>> data;
if(file.is_open()) {
std::string line;
std::string section;
while(std::getline(file, line)) {
std::istringstream ss(line);
std::string token;
std::getline(ss, token, '=');
if(token[0] == '[') {
section = QString::fromStdString(token.substr(1, token.size() - 2));
continue;
}
int key = std::stoi(token);
std::string value;
std::getline(ss, value);
data[section][key] = QString::fromStdString(value);
}
file.close();
}
return data;
}
```
然后,我们可以使用for循环遍历QMap,然后判断数据属于哪个区间,最后输出对应的value值:
```
QMap<QString, QMap<int, QVariant>> data = readConfigFile("config.ini");
int value = 45;
for(auto iter = data.constBegin(); iter != data.constEnd(); ++iter) {
const QString& section = iter.key();
const QMap<int, QVariant>& values = iter.value();
int lower = -1;
int upper = -1;
for(auto iter2 = values.constBegin(); iter2 != values.constEnd(); ++iter2) {
int key = iter2.key();
if(key <= value) {
lower = key;
}
if(key >= value) {
upper = key;
break;
}
}
if(lower != -1 && upper != -1) {
qDebug() << section << values[lower] << values[upper];
}
}
```
在上面的示例中,我们假设要查找的值为45。我们首先使用for循环遍历每个区间,然后使用内部的for循环遍历该区间中的所有值,判断该值属于哪个区间。如果找到了该区间,我们就输出该区间的名称和对应的value值。
需要注意的是,我们使用了两个for循环来遍历QMap,第一个for循环遍历每个区间,第二个for循环遍历该区间中的所有值。在第二个for循环中,我们使用lower和upper变量来保存该值所在的区间的下限和上限。如果找到了该区间,我们就输出该区间的名称和对应的value值。
阅读全文