diff options
author | Håvard Pettersen <havardpe@oath.com> | 2020-10-30 23:07:56 +0000 |
---|---|---|
committer | Håvard Pettersen <havardpe@oath.com> | 2020-10-30 23:07:56 +0000 |
commit | 52e8bd8f35b4eaf2a61d3c3d519c88181047f185 (patch) | |
tree | 5c48157631afe1beabdc9a050559bde087428339 | |
parent | ed503386849a167f57bb7023a80dd93d58c788e4 (diff) |
re-write to use nth_element and max_element
-rw-r--r-- | eval/src/vespa/eval/eval/aggr.h | 12 |
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; } }; |