通过matio使用matvar_t *Mat_VarSetStructFieldByName存入一个QMap<int,bool>的数据,并反向读出
时间: 2024-02-01 14:14:12 浏览: 22
使用matio库存储QMap<int,bool>需要进行以下步骤:
1. 定义一个matvar_t类型的变量,用于存储QMap<int,bool>。
```
matvar_t *matvar;
```
2. 创建一个QMap<int,bool>类型的变量,并往里面添加数据。
```
QMap<int,bool> myMap;
myMap.insert(1,true);
myMap.insert(2,false);
myMap.insert(3,true);
```
3. 调用Mat_VarCreateStruct函数创建一个结构体变量,并将其添加到mat_t变量中。
```
mat_t *mat = Mat_Create("myMap.mat",NULL);
matvar_t *structvar = Mat_VarCreateStruct("myMap", 1, NULL, 0);
matvar = Mat_VarCreate(NULL, MAT_C_STRUCT, MAT_T_STRUCT, 1, NULL, 0);
Mat_VarSetStructFieldByName(matvar, "myMap", 0, structvar);
Mat_VarFree(structvar);
```
4. 将QMap<int,bool>类型的变量转化为matvar_t类型的变量,并将其添加到结构体变量中。
```
matvar_t *mapvar = Mat_VarCreate(NULL, MAT_C_CELL, MAT_T_CELL, myMap.size(), NULL, 0);
int index = 0;
for (auto iter = myMap.begin(); iter != myMap.end(); iter++)
{
int key = iter.key();
bool value = iter.value();
matvar_t *keyvar = Mat_VarCreate(NULL, MAT_C_INT32, MAT_T_INT32, 1, &key, 0);
matvar_t *valuevar = Mat_VarCreate(NULL, MAT_C_UINT8, MAT_T_UINT8, 1, &value, 0);
matvar_t *cellvar = Mat_VarCreate(NULL, MAT_C_CELL, MAT_T_CELL, 2, NULL, 0);
Mat_VarSetCell(cellvar, 0, keyvar);
Mat_VarSetCell(cellvar, 1, valuevar);
Mat_VarSetCell(mapvar, index++, cellvar);
Mat_VarFree(keyvar);
Mat_VarFree(valuevar);
Mat_VarFree(cellvar);
}
Mat_VarSetStructFieldByName(matvar, "myMap", 0, mapvar);
Mat_VarFree(mapvar);
```
5. 将matvar_t类型的变量写入MATLAB格式文件。
```
Mat_VarWrite(mat, matvar, MAT_COMPRESSION_NONE);
Mat_VarFree(matvar);
Mat_Close(mat);
```
读取MATLAB格式文件反向存取QMap<int,bool>的过程如下:
1. 打开MATLAB格式文件。
```
mat_t *mat = Mat_Open("myMap.mat", MAT_ACC_RDONLY);
```
2. 获取结构体变量。
```
matvar_t *structvar = Mat_VarRead(mat, "myMap");
```
3. 获取QMap<int,bool>类型的变量。
```
matvar_t *mapvar = Mat_VarGetStructFieldByName(structvar, "myMap", 0);
```
4. 将matvar_t类型的变量转化为QMap<int,bool>类型的变量。
```
QMap<int,bool> myMap;
for (int i = 0; i < mapvar->dims[0]; i++)
{
matvar_t *cellvar = Mat_VarGetCell(mapvar, i);
int key = *(int *)Mat_VarGetCell(cellvar, 0);
bool value = *(bool *)Mat_VarGetCell(cellvar, 1);
myMap.insert(key, value);
}
```
5. 关闭MATLAB格式文件,释放内存。
```
Mat_VarFree(structvar);
Mat_Close(mat);
```
通过以上步骤,就可以使用matio库存储和反向读取QMap<int,bool>类型的数据了。