71 std::vector<typename AFilter::Object>& filteredResults)
74 std::swap(results, filteredResults);
80 using SeedType = std::remove_cv_t<std::remove_pointer_t<
81 decltype(std::declval<typename AFilter::Object>().getSeed())>>;
83 "OverlapResolver orders seed groups by getSeed()->getArrayIndex() to keep the "
84 "order reproducible; the result seed type must provide a getArrayIndex() method.");
89 std::stable_sort(results.begin(), results.end(),
90 [](
const typename AFilter::Object & lhs,
const typename AFilter::Object & rhs) {
91 return lhs.getSeed()->getArrayIndex() < rhs.getSeed()->getArrayIndex();
95 const auto& groupedBySeed = TrackingUtilities::adjacent_groupby(results.begin(), results.end(),
SeedGetter());
96 for (
const TrackingUtilities::VectorRange<Object>& resultsWithSameSeed : groupedBySeed) {
99 for (
Object& result : resultsWithSameSeed) {
100 TrackingUtilities::Weight weight =
m_filter(result);
101 if (std::isnan(weight)) {
113 const auto& longestElement = *(std::max_element(
m_resultsWithWeight.begin(), lastItemToUse,
114 TrackingUtilities::LessOf<NumberOfHitsGetter>()));
115 filteredResults.push_back(*(longestElement));