我是地图的新手。我需要一个为表演构建座位的课程(有很多表演)。这是我到目前为止所做的:
// header stuff/libraries
Seats::Seats()
{
map< const string, bool > seat;
seat["A1"] = false;
seat["A2"] = false;
/* more seats .. */
}
如果我想更新座位,是否需要创建访问成员?如果可以,我可以举个例子吗?
答案 0 :(得分:4)
正如其他人所指出的那样,你的map变量需要是该类的数据成员,而不是你发布的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];
}
请记住使用map的[]运算符虽然可以导致元素插入数据结构(如果它们尚不存在): link text
T&安培; operator [](const key_type&amp; 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;
}
};
答案 2 :(得分:0)
如果要将容器(如std::map
)用作类中的数据成员,则需要在类定义中将其与该类的其余数据成员一起使用。
std :: map的一个curios(故意)属性是operator[]
默认为那些尚未在集合中的键构造值,所以除非你真的需要得到一个列表({{1默认情况下),没有必要初始化它们。