| 277 | |
| 278 | template <class T, class Cmp> |
| 279 | std::vector<T> *TopN<T, Cmp>::Extract() { |
| 280 | auto out = new std::vector<T>; |
| 281 | out->swap(elements_); |
| 282 | if (state_ != HEAP_SORTED) { |
| 283 | std::sort(out->begin(), out->end(), cmp_); |
| 284 | } else { |
| 285 | out->pop_back(); |
| 286 | std::sort_heap(out->begin(), out->end(), cmp_); |
| 287 | } |
| 288 | return out; |
| 289 | } |
| 290 | |
| 291 | template <class T, class Cmp> |
| 292 | std::vector<T> *TopN<T, Cmp>::ExtractUnsorted() { |