-1

私はこれを正しく行っていますか?キーとして整数を持ち、値として構造体を持つマップが必要です。でオブジェクトが欲しいと言う最も簡単な方法は何ですか1。の値を取得するにはどうすればよいisIncludedですか?コードの最後の2行で試してみましたが、番号付きのMap配列で構造体の値を取得する方法がよくわからないことに気付きました。

その値を取得するために、それを呼び出しcells.get(1)て新しい一時的な構造体に割り当てる必要がありますか?

/** set ups cells map. with initial state of all cells and their info*/
void setExcludedCells (int dimension)
{
    // Sets initial state for cells
    cellInfo getCellInfo;
    getCellInfo.isIncluded = false;
    getCellInfo.north = 0;
    getCellInfo.south = 0;
    getCellInfo.west = 0;
    getCellInfo.east = 0;

    for (int i = 1; i <= (pow(dimension, 2)); i++)
    {
        cells.put(i, getCellInfo);
    }
    cout << "Cells map initialized. Set [" << + cells.size() << "] cells to excluded: " << endl;
    cells.get(getCellInfo.isIncluded);
    cells.get(1);
}

Mapは、次のようにプライベートインスタンス変数として宣言されます。

struct cellInfo {
    bool isIncluded;
    int north;  // If value is 0, that direction is not applicable (border of grid).
    int south;
    int west;
    int east;
};
Map<int, cellInfo> cells;       // Keeps track over included /excluded cells
4

1 に答える 1

2

Mapのドキュメントから、を.get()返すように見えますValueType

したがって、次のように使用します。

// Display item #1
std::cout << cells.get(1).isIncluded << "\n";
std::cout << cells.get(1).north << "\n";

または、ルックアップは比較的コストがかかるため、ローカル変数にコピーできます。

// Display item #1 via initialized local variable
cellInfo ci = cells.get(1);
std::cout << ci.isIncluded << " " << ci.north << "\n";

// Display item #2 via assigned-to local variable
ci = cells.get(2);
std::cout << ci.isIncluded << " " << ci.north << "\n";

私の最善のアドバイスは、代わりに標準ライブラリのstd::mapデータ構造を使用することです。

// Expensive way with multiple lookups:
std::cout << cells[1].isIncluded << " " << cells[1].north << "\n";

// Cheap way with one lookup and no copies
const cellinfo& ci(maps[1]);
std::cout << ci.isIncluded << " " << ci.north << "\n";
于 2012-11-21T17:49:12.997 に答える