43 {
44 auto comparator = [
this](Tidx a, Tidx
b) {
return compare_fun(a, b); };
45 if (!is_heap_)
46 {
47 container_.push_back(a);
48 if (container_.size() == k_ + 1)
49 {
50 std::make_heap(container_.begin(), container_.end(), comparator);
51 std::pop_heap(container_.begin(), container_.end(), comparator);
52 container_.pop_back();
53 is_heap_ = true;
54 }
55 }
56 else if (comparator(a, container_.front()))
57 {
58
59
60
61
62
63
64
65
66 std::pop_heap(container_.begin(), container_.end(), comparator);
67 container_.back() = a;
68 std::push_heap(container_.begin(), container_.end(), comparator);
69 }
70 }