关于map :: erase和map :: count

时间:2015-12-14 22:53:45

标签: c++ string dictionary

我只是对map :: count()和map :: erase()的使用有一个简单的问题。我使用这些与std :: string,但想知道我是否需要使用string :: c_str()。例如,我的代码目前显示为:

void Person::removeFriend(std::string first, std::string last){
    std::string name = (first + last);
    //checks to ensure the friend exists in the user's friend list
    if (_friends.count(name) == 1){
        _friends.erase(name);
    }
}

那么我的问题是,如果它实际上显示为:

void Person::removeFriend(std::string first, std::string last){
    std::string name = (first + last);
    //checks to ensure the friend exists in the user's friend list
    if (_friends.count(name.c_str()) == 1){
        _friends.erase(name.c_str());
    }
}

另外,我想这也适用于map :: insert()。我只知道使用std :: string打开文件的这种用法。任何和所有的建议都提前非常感谢!

2 个答案:

答案 0 :(得分:6)

不,这里没有理由使用c_str。在使用erase之前,您无需检查是否存在。你的功能可能只是这个:

void Person::removeFriend(const std::string& first, const std::string& last){
    std::string name = (first + last);
    _friends.erase(name);
}

......甚至:

void Person::removeFriend(const std::string& first, const std::string& last){
    _friends.erase(first + last);
}

答案 1 :(得分:2)

clipsToBounds的重载次数为erase,仅占用密钥。

std::map

您可以简单地使用:

size_type erase( const key_type& key );