qt二进制存储map,是map而不是qmap
时间: 2023-07-31 19:11:44 浏览: 163
在Qt中存储std::map的二进制文件需要进行以下步骤:
1. 将std::map中的数据转换为字节数组,可以使用QByteArray类。
```cpp
#include <QByteArray>
#include <map>
// std::map to QByteArray
QByteArray mapToByteArray(const std::map<int, QString>& data)
{
QByteArray byteArray;
QDataStream stream(&byteArray, QIODevice::WriteOnly);
// 将map中的元素写入stream中
for (const auto& item : data)
{
stream << item.first << item.second;
}
return byteArray;
}
```
2. 将字节数组写入二进制文件中,可以使用QFile类。
```cpp
#include <QFile>
void writeMapToFile(const std::map<int, QString>& data, const QString& fileName)
{
QByteArray byteArray = mapToByteArray(data);
QFile file(fileName);
if (file.open(QIODevice::WriteOnly))
{
file.write(byteArray);
file.close();
}
}
```
3. 从二进制文件中读取字节数组。
```cpp
QByteArray readByteArrayFromFile(const QString& fileName)
{
QByteArray byteArray;
QFile file(fileName);
if (file.open(QIODevice::ReadOnly))
{
byteArray = file.readAll();
file.close();
}
return byteArray;
}
```
4. 将字节数组转换为std::map。
```cpp
// QByteArray to std::map
std::map<int, QString> byteArrayToMap(const QByteArray& byteArray)
{
std::map<int, QString> data;
QDataStream stream(byteArray);
while (!stream.atEnd())
{
int key;
QString value;
stream >> key >> value;
data.emplace(key, value);
}
return data;
}
```
完整的示例代码如下:
```cpp
#include <QByteArray>
#include <QDataStream>
#include <QFile>
#include <map>
QByteArray mapToByteArray(const std::map<int, QString>& data)
{
QByteArray byteArray;
QDataStream stream(&byteArray, QIODevice::WriteOnly);
for (const auto& item : data)
{
stream << item.first << item.second;
}
return byteArray;
}
void writeMapToFile(const std::map<int, QString>& data, const QString& fileName)
{
QByteArray byteArray = mapToByteArray(data);
QFile file(fileName);
if (file.open(QIODevice::WriteOnly))
{
file.write(byteArray);
file.close();
}
}
QByteArray readByteArrayFromFile(const QString& fileName)
{
QByteArray byteArray;
QFile file(fileName);
if (file.open(QIODevice::ReadOnly))
{
byteArray = file.readAll();
file.close();
}
return byteArray;
}
std::map<int, QString> byteArrayToMap(const QByteArray& byteArray)
{
std::map<int, QString> data;
QDataStream stream(byteArray);
while (!stream.atEnd())
{
int key;
QString value;
stream >> key >> value;
data.emplace(key, value);
}
return data;
}
int main()
{
std::map<int, QString> data = { { 1, "hello" }, { 2, "world" } };
QString fileName = "test.bin";
writeMapToFile(data, fileName);
QByteArray byteArray = readByteArrayFromFile(fileName);
std::map<int, QString> result = byteArrayToMap(byteArray);
return 0;
}
```
阅读全文