title: which design considerations justify std::make_heap() to be apparently sub-optimal?
body: <p>According to <a href="https://en.cppreference.com/w/cpp/algorithm/make_heap" rel="nofollow noreferrer">cppreference</a> (and the requirement in the C++ standard) <code>std::make_heap()</code> takes at most <em>3n</em> comparisons, but according to <a href="http://en.wikipedia.org/wiki/Binary_heap#Building_a_heap" rel="nofollow noreferrer">Wikipedia</a> no more than <em>2n</em> comparisons are actually needed.</p>
  
  <p>What are the design considerations, if any, behind the apparently sub-optimal specification?</p>
  
  <p>Are there, perhaps, algorithms that trade comparisons with swap operations, i.e. can do with (on average) fewer swaps at the price of more comparisons?</p>
  
  <hr>
  
  <p><strong>For those who want to close this as opinion-based:</strong> I have edited the post to avoid it being opinion-based, by following <a href="https://meta.stackoverflow.com/a/323382/1023390">this recommendation on meta</a> and avoiding a <em>why do we have such and such language feature?</em> question, but instead asking precisely what I want to know. If you still think, this is opinion-based, please suggest how this can be addressed.</p>