C++如何从文件读取稀疏矩阵并用三元组存储
时间: 2024-11-23 11:29:26 浏览: 16
在C++中,读取稀疏矩阵通常会使用三元组(std::tuple 或者 std::pair)来表示每个非零元素,因为稀疏矩阵大部分元素都是0,存储全部元素会浪费空间。以下是一个基本步骤:
1. 定义一个数据结构来表示非零元素及其坐标,例如,你可以用`std::tuple<int, int, double>`,其中第一个整数代表行索引,第二个整数代表列索引,第三个元素存储数值。
```cpp
using T = std::tuple<int, int, double>;
```
2. 创建一个容器(如`std::vector<T>`)来存储所有非零元素。
```cpp
std::vector<T> sparseMatrix;
```
3. 打开文件,如果使用文本文件,可以逐行读取。每一行包含三个由空格分隔的部分(表示行、列和值)。例如,对于文件中的 "1 2 3.5",这意味着第1行第2列有3.5这个值。
```cpp
std::ifstream file("sparse_matrix.txt");
if (file.is_open()) {
std::string line;
while (std::getline(file, line)) {
auto values = split(line, ' ');
if (values.size() == 3) {
int row = std::stoi(values[0]);
int col = std::stoi(values[1]);
double val = std::stod(values[2]);
sparseMatrix.push_back(std::make_tuple(row, col, val));
}
}
file.close();
}
```
4. `split` 函数用于将字符串分割成三部分,这里未给出,需要自定义或者使用现成库函数,例如 Boost 库中的 `boost::split`。
完成以上操作后,`sparseMatrix` 就包含了稀疏矩阵的所有非零元素及其坐标。
阅读全文