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

std::unordered_map<string, ExcelSheet*>ワークシートを参照するために文字列のベクトルを格納するよりも a の方が良いと思います。

このようにして、一定の時間内に 1 つのシートにアクセスでき、多くのことを心配する必要はありません。もちろん、これはメモリに連続したレイアウトを持ちませんが、必要ないと思います。名前を特定のシートに保存し (std::vector必要に応じて に保存し)、名前で特定のシートにアクセスするために使用されるペアリングとしてマップを使用できます。

于 2013-03-06T22:38:36.820 に答える
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 に答える