Can someone please tell me the point of the STL heap function templates like std::make_heap
? Why would anyone ever use them? Is there a practical use?
C++ – the point of make_heap
clanguage-designstl
Related Topic
- C++ – What does the explicit keyword mean
- C++ – The Definitive C++ Book Guide and List
- Python – “Least Astonishment” and the Mutable Default Argument
- C++ – the “–>” operator in C/C++
- C++ – The Rule of Three
- C++ – C++ programmers minimize use of ‘new’
- C++ – Why are elementwise additions much faster in separate loops than in a combined loop
- C++ – use a pointer rather than the object itself
Best Answer
Your direct question would be well-answered by a class in algorithms and data structures. Heaps are used all over the place in algorithms in computer science. To quote from the make_heap function linked below, "a heap is a tree where each node links to values not greater than its own value." While there are lots of applications for a heap, the one that I use most frequently is in search problems when you want to keep track of a sorted list of N values efficiently.
I had similar confusion to yours when I first encountered the STL heap functions. My question was a little bit different though. I wondered "Why isn't the STL heap in the same class of data structures as std::vector?" I thought that it should work like this:
The idea behind the STL heap functions though is that they allow you to make a heap data structure out of several different underlying STL containers, including std::vector. This can be really useful if you want to pass around the container for use elsewhere in your programs. It's also a little bit nice, because you can choose the underlying container of your heap if you so choose to use a something other than std::vector. All you really need are the following:
This means that you can make lots of different containers into a heap A comparator is also optional in the method signature, you can read more about the different things that you can try in the STL pages for the make_heap function.
Links: