|
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
|
||||||
Ошибка с лямбдой в арг., а с функцией компилируется15.03.2016, 22:38. Показов 1388. Ответов 6
Метки нет (Все метки)
Объясните, если не затруднит.
Есть функция с одним параметром string (set.find(val)), если в роли аргумента другая функция с возвращаемым значением string, то компилируется. А если лямбду точно с таким же набором, ошибка (нет такой перегруженной под лямбду). А если не встроенный set.find(val) использовать, а библиотечный find(beg, end, val), то пишет ошибку при компиляции (нет оператора сравнения == для типа такого-то) Почему так? Лямбда разве не вызывается как функция?
0
|
||||||
| 15.03.2016, 22:38 | |
|
Ответы с готовыми решениями:
6
|
|
Вездепух
13179 / 6815 / 1821
Регистрация: 18.10.2014
Сообщений: 17,243
|
|
| 15.03.2016, 22:40 | |
Сообщение было отмечено yrceus как решение
Решение
Ничего не понял. Покажите, как ваш код выглядит с лямбдой. Куда и как вы ее вставляете?
Подозреваю, что вы в find пытаетесь передать саму лямбду (что бессмысленно), а не результат вызова лямбды (как надо было бы). Т.е. вы просто забываете применить оператор () к вашей лямбде.
1
|
|
|
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
|
||||||||||||||||
| 15.03.2016, 23:09 [ТС] | ||||||||||||||||
Или вот так, с библиотечным find.
Добавлено через 5 минут В лямбде код должен убрать все знаки пунктуации и везде понизить регистр у символов. И такую поправленную строку(слово) вернуть в find. А find уже ее должен сравнить с набором(set). Добавлено через 13 минут Вот я обрезал все, чтоб в глазах не рябило, сразу не додумался. Почему здесь ошибка?
0
|
||||||||||||||||
|
Вездепух
13179 / 6815 / 1821
Регистрация: 18.10.2014
Сообщений: 17,243
|
|||||||||||||||||||||||
| 15.03.2016, 23:21 | |||||||||||||||||||||||
Сообщение было отмечено yrceus как решение
Решениеfind, вместо того, чтобы передавать результат вызова лямбды. В std::set нет и никогда не было find, который бы принимал функциональный объект на вход. std::set::find требует на вход ключ поиска.То есть вот так
() после финальной } лямбды.Но при этом совершенно не ясно, зачем вам вообще понадобилась лямбда - она только запутала код и ничего не дала. Без лямбды было намного читабельнее. А также не ясно, зачем вы передаете аргументы pn и str через capture, а не сделали их обычными параметрами лямбды (как было в fun). Смысл лямбд - компактный синтаксис для создания функциональных объектов, которые будут сохраняться и потенциально использоваться много раз. Ваша же лямбда используется один-единственный раз. Зачем она нужна тогда?То есть то, что вы делаете в своем коде - это фактически заменяете
Добавлено через 7 минут std::find требует на вход сам ключ поиска, а не какую-то лямбду. То есть правильно
1
|
|||||||||||||||||||||||
|
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
|
|
| 15.03.2016, 23:24 [ТС] | |
|
Ага, понял!))))) Здорово, мы получается передаем вызываемый объект со скобками, а если без дополнительных скобок, то прям лямбду туда и передаем. Понял, огромнейшее вам спасибо!!! Сам бы ни за что бы не догадался!
А pn да, можно было бы и просто передать, а вот str же мы изменить должны в лямбде(функции) и далее она(строка) уже другая записывается в карту. Хотя можно и так, да, в оригинале записать. С вами не поспоришь
0
|
|
|
Вездепух
13179 / 6815 / 1821
Регистрация: 18.10.2014
Сообщений: 17,243
|
|||||||
| 15.03.2016, 23:34 | |||||||
Сообщение было отмечено yrceus как решение
Решение
Если вы хотели использовать лямбду для написания предиката сравнения и передать этот предикат в алгоритм поиска, то вам нужен был бы
find_if, а не find. find_if как раз так принимает на вход не сам ключ, а предикат.И выглядело бы это так
std::set::find такого нет и быть не может, ибо упорядочивающий предикат там уже задан жестко.Добавлено через 8 минут str можно было сделать там прямо в коде открытым текстом. Вы же зачем-то заворачиваете это изменение в лямбду, после чего просто один раз вызываете эту лямбду. Т.е. имеет место полная аналогия с a = [b, c]() { return b + c; }(); из моего предыдущего сообщения. Зачем это делать?Если вам не нравится нагроможденный код, то подготовку str можно вынести в отдельную обычную функцию (ваш fun). А у вас сейчас просто обычный нагроможденный код заменяется на тот же самый нагроможденный код, но с "одноразовой" лямбдой.
1
|
|||||||
|
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
|
|
| 15.03.2016, 23:42 [ТС] | |
|
Перегромоздил))) Зато теперь знаю про скобки после лямбды, еще раз вам спасибо!
0
|
|
| 15.03.2016, 23:42 | |
|
Помогаю со студенческими работами здесь
7
select запрос: возвратить первый не NULL из списка арг-ов
Remove_if с лямбдой переделать на без лямбды Функция выборки из Dictionary с лямбдой в качестве параметра
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3.
Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|