31 auto FuzzyFindIn(Container
const& container, NeedleContainer
const& needles, ContainsOperator
const& contains = {}, int(*bonus)(
decltype((*std::begin(std::declval<Container>())))) =
nullptr)
33 using IteratorResult =
decltype((*std::begin(container)));
34 using MappedType = std::conditional_t<std::is_reference_v<IteratorResult>, std::reference_wrapper<std::remove_reference_t<IteratorResult>>, IteratorResult>;
35 std::multimap<size_t, MappedType, std::greater<size_t>> results;
37 for (
auto outerIt = std::begin(container), outerEnd = std::end(container); outerIt != outerEnd; ++outerIt)
40 for (
auto innerIt = std::begin(needles), innerEnd = std::end(needles); innerIt != innerEnd; ++innerIt)
41 if (contains(*outerIt, *innerIt))
48 count += bonus(*outerIt);
50 results.emplace(count, *outerIt);