Очень долго старался понять в чем же ошибка, когда я использую std::bind2nd.
Поиск через std::bind проходит успешно:
#include <iostream>
#include <map>
#include <functional>
//...
bool equal(const std::pair< int, std::string >& p, const std::string& s)
{
return p.second == s;
}
int main()
{
std::map<int, std::string> list;
//...
list[5] = "error";
list[6] = "filled";
//...
const std::string for_chack ="error";
// первый способ поиска
auto I = std::find_if(list.begin(), list.end(),
std::bind(equal, std::placeholders::_1, for_chack));
++I;
std::cout << I->first << std::endl;
// второй способ
auto J = std::find_if(list.begin(), list.end(),
std::bind2nd(std::ptr_fun(equal), for_chack));
++J;
std::cout << J->first;
return 0;
}
при поиске вторым способом выдается ошибка:
C:\Qt\Qt5.9.0\Tools\mingw530_32\i686-w64-mingw32\include\c++\backward\binders.h:163: error: 'typename _Operation::result_type std::binder2nd<_Operation>::operator()(typename _Operation::first_argument_type&) const [with _Operation = std::pointer_to_binary_function<const std::pair<int, std::__cxx11::basic_string<char> >&, const std::__cxx11::basic_string<char>&, bool>; typename _Operation::result_type = bool; typename _Operation::first_argument_type = const std::pair<int, std::__cxx11::basic_string<char> >&]' cannot be overloaded
operator()(typename _Operation::first_argument_type& __x) const
Помогите пожалуйста разобраться в чем же ошибка
std::bind1st и std::bind2nd не работают если среди параметров есть ссылки. Измените сигнатуру функции, так, чтобы она принимала значения или указатели, и все заработает.
bool equal(const std::pair< int, std::string > p, const std::string s)
{
return p.second == s;
}
Насколько мне известно, сейчас уже не рекомендуют использовать bind2nd (а в 17 стандарте и вообще удалены ) и подобные - есть лямбды
// второй способ
auto J = std::find_if(list.begin(), list.end(), [for_chack](const std::pair< int, std::string >& p) {
return for_chack == p.second;
});
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости