声明多维混合类型数组的最有效方法是什么?

时间:2013-03-06 22:35:56

标签: c++ arrays visual-c++ vector

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

有没有简单的方法可以解决这个问题,或者我是否需要创建一个多维向量并且有一个单独的数组,其中包含用于确定工作表名称的相应索引?即,

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);
};

2 个答案:

答案 0 :(得分:0)

我想std::unordered_map<string, ExcelSheet*>比存储字符串向量更能引用您的工作表。

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

答案 1 :(得分:0)

您正在寻找(嵌套)associative containers。这样的事情应该让你开始:

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";