32 using IteratorResult =
decltype((*std::begin(container)));
33 using MappedType = std::conditional_t<std::is_reference_v<IteratorResult>, std::reference_wrapper<std::remove_reference_t<IteratorResult>>, IteratorResult>;
34 std::multimap<size_t, MappedType, std::greater<size_t>> results;
36 for (
auto outerIt = std::begin(container), outerEnd = std::end(container); outerIt != outerEnd; ++outerIt)
39 for (
auto innerIt = std::begin(needles), innerEnd = std::end(needles); innerIt != innerEnd; ++innerIt)
40 if (contains(*outerIt, *innerIt))
47 count += bonus(*outerIt);
49 results.emplace(count, *outerIt);