|
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
|
||||||
Ошибка с лямбдой в арг., а с функцией компилируется15.03.2016, 22:38. Показов 1345. Ответов 6
Метки нет (Все метки)
Объясните, если не затруднит.
Есть функция с одним параметром string (set.find(val)), если в роли аргумента другая функция с возвращаемым значением string, то компилируется. А если лямбду точно с таким же набором, ошибка (нет такой перегруженной под лямбду). А если не встроенный set.find(val) использовать, а библиотечный find(beg, end, val), то пишет ошибку при компиляции (нет оператора сравнения == для типа такого-то) Почему так? Лямбда разве не вызывается как функция?
0
|
||||||
| 15.03.2016, 22:38 | |
|
Ответы с готовыми решениями:
6
|
|
Вездепух
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
|
|
| 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
|
||||||||||||||||
|
Вездепух
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
|
|||||||||||||||||||||||
| 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
|
|
|
Вездепух
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
|
|||||||
| 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 с лямбдой в качестве параметра
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|