STLセットで検索と消去を使用して理解するのに問題があります。私はこれを持っています:
struct NotMemberFound : exception {};
class FriendGroup
{
private:
set<Person, ClassComp> members;
public:
FriendGroup(): {}
virtual void add_member(const Person& person)
{
members.insert(person);
n_members = members.size();
}
virtual void remove_member(const Person& person)
{
const set<Person, ClassComp>::iterator it = members.find(person);
if (it == members.end())
throw NotMemberFound();
else
{
members.erase(it);
}
}
}
人には1つの属性(文字列名)と、彼の唯一の属性を返すmetod get_name()があります。そして、ClassCompは次のように定義します。
struct ClassComp
{
bool operator() (const Person& a, const Person& b) const
{
return a.get_name() != b.get_name();
}
};
さて、私がこのようにそれを使おうとしているとき:
int main(void)
{
Person messi("Messi");
Person xavi("Xavi");
Person iniesta("Iniesta");
FriendGroup barcelona;
barcelona.add_member(messi);
barcelona.add_member(xavi);
barcelona.add_member(iniesta);
barcelona.remove_member(iniesta);
return 0;
}
最後の要素を追加してremove_memberを呼び出すと、プログラムは例外(NotMemberFound)をスローします。しかし、他のメンバーを消去しようとしても、この問題は発生しません。
私のコードの何が問題になっていますか?
//ひどい英語でごめんなさい:S //