Очень долго старался понять в чем же ошибка, когда я использую 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;
});
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Всем привет, мне нужно узнать программно где лежат файл программы
Дан одномерный массивНайти количество различных чисел в этом массиве, используя функцию сортировки
Пишу оконное приложение на Embarcadero C++ Builder XE7, ОС Windows 7В нем при запуске главной формы создается, но сразу не запускается поток
Всем привет, надо разложить число на множители(определенные)С маленькими числами все работает