Вы не можете получить адрес функции-члена стандартной библиотеки, потому что объявления таких функций-членов не определены (в реализации разрешено добавлять дополнительные, необязательные параметры или добавлять дополнительные перегрузки в другие не перегруженные функции-члены, если толькоповедение такое же).
Самый простой способ сделать то, что вы пытаетесь сделать, это:
for (std::set<std::string>::iterator it(keys.begin()); it != keys.end(); ++it)
{
mymap.erase(*it);
}
Если у вас есть компилятор, который поддерживает лямбда-выражения, вы также можете подумать:
std::for_each(keys.begin(), keys.end(), [&mymap](const std::string& key)
{
mymap.erase(key);
});
Если по какой-то причине вы действительно хотите использовать bind
, вам нужно написать функциональный объект для вызова erase
:
struct assoc_erase
{
typedef void result_type;
template <typename TContainer, typename TKey>
void operator()(TContainer* container, const TKey& key)
{
container->erase(key);
}
};
// Used as:
std::for_each(keys.begin(), keys.end(), std::bind(assoc_erase(), &mymap, _1));