Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:查找并删除集合元素_C++_Stl_Find_Set_Erase - Fatal编程技术网

C++ C++;:查找并删除集合元素

C++ C++;:查找并删除集合元素,c++,stl,find,set,erase,C++,Stl,Find,Set,Erase,我很难理解如何使用STL集合查找和擦除。我有这个: struct NotMemberFound : exception {}; class FriendGroup { private: set<Person, ClassComp> members; public: FriendGroup(): {} virtual void add_member(const Person& person) { members.insert(

我很难理解如何使用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);
        }
    }
}
嗯,当我试着这样使用它时:

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)。但如果我试图删除任何其他成员,我没有这个问题

我的代码有什么问题


//对不起,我的英语糟透了:你的比较仪应该是

struct ClassComp {
    bool operator() (const Person& a, const Person& b) const {
        return a.get_name() < b.get_name();
    }
};
struct ClassComp{
布尔运算符()(const Person&a、const Person&b)const{
返回a.get_name()
比较器应该说明一个元素是否低于另一个元素。在您的情况下,就像您对
std::set
所说的
mesi
xavi
。在查找元素时,它无法找到它,因为它假定元素已排序,并使用二进制搜索查找它们