当前位置: 首页 > 知识库问答 >
问题:

将CSV中的二维数组读入映射C++

周奇文
2023-03-14

我是一个CPLEX用户,我需要将CSV文件中的数组数据转换为C++2D映射作为优化问题的输入。数据以列的形式显示。也就是说,如果我们考虑3行(AA1、AA2、AA3)和3列(BB1、BB2、BB3)及其各自的值,它们在CSV文件中的格式如下:

行、COL、值
AA1,BB1,0.3
AA2,BB1,0.5
AA1,BB2,0.6
AA1,BB3,0.7
AA2,BB2,0.9
AA3,BB2,0.5
AA3,BB1,0.6
AA2,BB3,0.4
AA3,BB3,0.6
AA2,BB3,0.6
AA2,BB3,0.4
AA3,BB3

如您所见,数据既不按行排序,也不按列排序。我希望将数据读入格式为“Map >”的2D映射,以便对结果映射进行排序:

行、行、值
AA1,BB1,0.3
AA1,BB2,0.6
AA1,BB3,0.7
AA2,BB1,0.5
AA2,BB2,0.9
AA2,BB3,0.4
AA3,BB1,0.6
AA3,BB2,0.5
AA3,BB3,0.6
AA3,BB2,0.5
AA3,BB3,0.6
AA3,0.6
AA3,0.6
AA3

任何帮助都将不胜感激!谢谢你。

[编辑]行和列的数量是预先知道的-不需要计数。我对C++比较陌生(从OPL优化语言迁移过来),我不太熟悉文件操作。任何示例代码都将对我理解过程大有帮助。

共有1个答案

司徒正信
2023-03-14

由于使用空格作为分隔字符,因此应该能够使用标准的 实现快速实现:

#include <ifstream>
#include <string>
#include <map>
#include <iostream>

int main() {
    // Open file:
    std::ifstream fin("filename.csv"); // Open in text-mode.

    // Opening may fail, always check.
    if (!fin) { 
        std::cout << "Error, could not open file." << std::endl; 
        return -1;
    }

    // Construct your map.
    std::map< std::string, std::map<std::sting, float> > valMap;

    // Read the file and load the data:
    std::string row, column;
    float value;
    while ( fin >> row >> column >> value ) { // Reads three values from file.
          valMap[row][col] = value;  // Adding the values to the map, if the cell is 
                                     // a duplicate: It will be overwritten.
    }

    // Close the file:
    fin.close();

    // Printing out the data like you described:
    for ( auto & columnMap : valMap ) {
        for ( auto cell : columnMap.second ) {
                std::cout << columnMap->first /*First label*/ << " "
                          << cell->first      /*Second label*/ << " "
                          << cell->second     /* Value */ << std::endl;
        }
    }

    return 0;
}
 类似资料:
  • 问题内容: 我正在尝试将csv文件“ read_ex.csv”读入数组。我在web / stackoverflow上进行了无休止的搜索,以找到一种将文件读入数组的方法。我能做的最好的事情是以流方式读取它,但是由于文件大小可变,我无法将其存储在数组中。我相信ArrayList是处理可变大小数组的方法,但是我不知道如何使用它。本质上,我希望能够在while循环结束后访问String数组“ values

  • 问题内容: 我不知道是否有一个CSV文件的内容导入到一个记录阵列直接的方式,很多的方式是的和家庭的进口数据与R的数据帧? 还是使用然后应用类似内容的最佳方法? 问题答案: 你可以通过将 设置为逗号来使用Numpy的方法。 有关该功能的更多信息,请参见其相应的文档。

  • 我刚接触Python。当我试图将一个2维数组插入到一个3D数组中时,我得到了这样一个错误: 下面是我的代码: 目的是创建一个队列,其中的表[0]总是最新的元素(一个2D数组),而最旧的元素将弹出。 谁知道我怎么解决这个?多谢!

  • csv文件可以正确下载,但里面什么都没有。我希望每个新条目在导出之前在不同的行上。不确定为什么数据没有在CSV中注册,我在这一点上没有得到任何错误。谢谢你的帮助。这是一个chrome扩展。 我在下面的相关帖子中尝试了所有不同的答案,但似乎没有一个在CSV中注册我的数据: 我也尝试了以上问题的所有其他可能的答案。我很感激你的帮助!谢谢!!

  • 问题内容: 我有, 如图所示这里,我们创建一个从原点的二维之一。但是,如何迭代内部,以便可以在 其中 创建 列索引* 和 行索引 而又不 创建新 索引 呢?我希望将其索引打印到二维数组 (2x5) 时看起来像这样: __ * 我认为这里的主要问题是获取 列索引 和 行索引 而没有创建二维 索引 。是不是 问题答案: 如果要以行为主的顺序,给定row ,column 并且伪造(缺乏更好的术语)带有列

  • 问题内容: 我有一个遗留数据库,我正在尝试将其重新设计成21世纪。现有的数据结构之一涉及一个特定的类,该类包含一个二维值矩阵。如果要从数据库中对该类进行逆向工程,则最终会得到一系列属性,例如: 等等。由于这是一个6x6的矩阵,因此有很多这样的列。 我一直在寻找更好的方法,但是我不确定我在那儿。我想做的是这样的: 但这失败了: 我想不仅要尝试解决错误,还应该四处询问并尝试找到解决此映射挑战的正确 方