summaryrefslogtreecommitdiffstats
path: root/eval
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2020-10-30 23:07:56 +0000
committerHåvard Pettersen <havardpe@oath.com>2020-10-30 23:07:56 +0000
commit52e8bd8f35b4eaf2a61d3c3d519c88181047f185 (patch)
tree5c48157631afe1beabdc9a050559bde087428339 /eval
parented503386849a167f57bb7023a80dd93d58c788e4 (diff)
re-write to use nth_element and max_element
Diffstat (limited to 'eval')
-rw-r--r--eval/src/vespa/eval/eval/aggr.h12
1 files changed, 7 insertions, 5 deletions
diff --git a/eval/src/vespa/eval/eval/aggr.h b/eval/src/vespa/eval/eval/aggr.h
index 2412008db61..b75b07422c1 100644
--- a/eval/src/vespa/eval/eval/aggr.h
+++ b/eval/src/vespa/eval/eval/aggr.h
@@ -145,12 +145,14 @@ public:
return std::numeric_limits<T>::quiet_NaN();
}
std::vector<T> tmp = _seen;
- std::sort(tmp.begin(), tmp.end());
- size_t cnt = tmp.size();
- if ((cnt % 2) == 0) {
- return ((tmp[cnt/2] + tmp[(cnt-1)/2]) / T{2});
+ size_t n = (tmp.size() / 2);
+ std::nth_element(tmp.begin(), tmp.begin() + n, tmp.end());
+ T result = tmp[n]; // the nth element
+ if ((tmp.size() % 2) == 0) {
+ result += *std::max_element(tmp.begin(), tmp.begin() + n);
+ result /= T{2};
}
- return tmp[cnt/2];
+ return result;
}
};