0


1

クラス内のC ++マップ、メンバーアクセサーを作成する方法

私は地図が初めてです。 パフォーマンスの座席を構成するクラスが必要です(多くのパフォーマンスがあります)。 これが私がこれまでに持っているものです:

// header stuff/libraries

Seats::Seats()
{
    map< const string, bool > seat;

    seat["A1"] = false;
    seat["A2"] = false;
    /* more seats .. */
}

座席を更新する場合、アクセスメンバーを作成する必要がありますか? できれば、例を挙げることができますか?

3 Answer


4


他の人が示したように、マップ変数は、投稿したSeatsコンストラクターのローカルスコープにないクラスのデータメンバーである必要があります

class Seats {
public:
   Seats();
   bool GetSeat(const string &);
   void SetSeat(const string &, bool);

private:
   map< string, bool > seat;

};

Seats::Seats() {
    // merely your example values posted.
    seat["A1"] = false;
    seat["A2"] = false;
}

void Seats::SetSeat(const string &seat_number, bool occupied) {
    seat[seat_number] = occupied;
}

bool Seats::GetSeat(const string &seat_number) {
    return seat[seat_number];
}

マップの[]演算子を使用することを覚えておいてください。ただし、まだ存在しない場合、データ構造に要素が挿入される可能性があります。http://www.cplusplus.com/reference/stl/map/operator%5B%5D/ [リンクテキスト]

_ T&operator [](const key_type&x); xがコンテナ内のどの要素のキーとも一致しない場合、関数はそのキーを持つ新しい要素を挿入し、マップされた値への参照を返します。 マップされた値が要素に割り当てられていない場合でも、これにより常にマップサイズが1つ増加します(要素はデフォルトのコンストラクタを使用して構築されます)。 _


0


これであなたは始められるかもしれません。

class Seats {
private: // private section: implementation details here
    set< string > reservations;

public: // public section: accessors here
    bool is_reserved( string const &id ) const {
        return reservations.count( id );
    }

    bool reserve( string const &id ) { // return false if res. already existed
        return reservations.insert( id ).second;
    }
};


0


コンテナ( `std

map`など)をクラスのデータメンバーとして使用する場合は、クラス定義で、そのクラスの残りのデータメンバーと一緒にコンテナを配置する必要があります。

std

mapのcurios(意図的な)プロパティは、 operator []`デフォルトがまだコレクションにないキーの値を構築するため、実際にリストを取得する必要がない限り(デフォルトでは `false)キーを初期化する必要はありません。