0

我正在创建一个类来帮助创建 excel 文件。我正在考虑在计算最终输出之前将工作表数据存储在内存中的各种方法。理想情况下,我想做一些类似的事情,std::string myArray["Sheet1"][3][7] = "this is the value of row 3 column 7 in worksheet Sheet1"但这在 C++ 中似乎是不可能的......或者是吗?

有什么简单的方法可以解决这个问题,还是我必须创建一个多维向量并有一个带有相应索引的单独数组来确定工作表名称?IE,

std::vector<std::vector<std::vector<std::string> > > Worksheet;
std::vector<std::string> WorksheetNames;
// whenever I create a new worksheet...
WorksheetNames[7] = "Sheet1";
// and then to reference that worksheets' data...
Worksheet[7][1][1] = "value of row 1 column 1";

class ExcelSheet {
    string Code, Worksheet, Style; // temp vars for data manipulation
    std::vector<std::vector<std::vector<std::string> > > Worksheet;

public:
    ExcelSheet();
    ExcelSheet(int,int);
    ~ExcelSheet();
    void Create();
    void Destroy();
    bool SetEntryValue(std::string szWorksheet, int nColumn, int nRow);
    bool SetEntryStyle(std::string szWorksheet, int nColumn, int nRow);
};
4

2 回答 2

0

您正在寻找(嵌套的)关联容器。这样的事情应该让你开始:

typedef std::map< unsigned, std::string > columns;
typedef std::map< unsigned, columns > rows;
typedef std::map< std::string, rows > sheets;

sheets my_sheets;
my_sheets["Sheet1"][3][7] = "hello";
于 2013-03-06T22:43:28.510 回答
0

我想 astd::unordered_map<string, ExcelSheet*>会比存储一个字符串向量来引用您的工作表更好。

通过这种方式,您可以在恒定时间内访问单个工作表,而不必担心很多事情。当然,这在内存中不会有连续的布局,但我想你不需要它。您仍然可以将名称存储在特定工作表中(并在std::vector需要时将它们存储在 a 中),并将地图用作按名称访问特定工作表的配对。

于 2013-03-06T22:38:36.820 回答