C++ Codes
Algorithms
Algorithm Analysis in C++
Beginners
Code Snippets
Graphics
Data Structures
File Manipulation
Games
Mathematics
Miscellaneous
Visual C++ Library
C++ > Visual C++ 5.0 Standard C++ Library sample source codes
Algorithm sort heap - A heap is a sequence of elements organized like a binary tree
Algorithm sort heap - A heap is a sequence of elements organized like a binary tree sort_heap Header <algorithm> template<class RandomAccessIterator> inline void sort_heap(RandomAccessIterator first, RandomAccessIterator last) A heap is a sequence of elements organized like a binary tree. Each heap element corresponds to a tree node. The first value in the sequence [first..last) is the root, and is the largest value in the heap. Every element in the heap satisfies the following: Every element is less than or equal to its parent. The largest element is stored in the root, and all children hold progressively smaller values. The sort_heap function sorts a "heapified" sequence that was created using the make_heap function. The non-predicate versions of the heap functions use the operator< for comparisons. template<class RandomAccessIterator, class Compare> inline void sort_heap(RandomAccessIterator first, RandomAccessIterator last, Compare compare) A heap is a sequence of elements organized like a binary tree. Each heap element corresponds to a tree node. The first value in the sequence [first..last) is the root, and is ordered by the predicate. For example, if the predicate is greater, every element in the heap satisfies the following: Every element is greater than or equal to its parent. The smallest element is stored in the root, and all children hold progressively larger values. The sort_heap function sorts a "heapified" sequence that was created using the make_heap function. The predicate versions of the heap functions use the compare function for comparisons. Samples Sample for Non-Predicate Version // disable warning C4786: symbol greater than 255 character, // okay to ignore #pragma warning(disable: 4786) #include <iostream> #include <algorithm> #include <functional> #include <vector> using namespace std; void main() { const int VECTOR_SIZE = 8 ; // Define a template class vector of int typedef vector<int > IntVector ; //Define an iterator for template class vector of strings typedef IntVector::iterator IntVectorIt ; IntVector Numbers(VECTOR_SIZE) ; IntVectorIt it ; // Initialize vector Numbers Numbers[0] = 4 ; Numbers[1] = 10; Numbers[2] = 70 ; Numbers[3] = 10 ; Numbers[4] = 30 ; Numbers[5] = 69 ; Numbers[6] = 96 ; Numbers[7] = 100; // print content of Numbers cout << "Numbers { " ; for(it = Numbers.begin(); it != Numbers.end(); it++) cout << *it << " " ; cout << " }\n" << endl ; // convert Numbers into a heap make_heap(Numbers.begin(), Numbers.end()) ; cout << "After calling make_heap\n" << endl ; // print content of Numbers cout << "Numbers { " ; for(it = Numbers.begin(); it != Numbers.end(); it++) cout << *it << " " ; cout << " }\n" << endl ; // sort the heapified sequence Numbers sort_heap(Numbers.begin(), Numbers.end()) ; cout << "After calling sort_heap\n" << endl ; // print content of Numbers cout << "Numbers { " ; for(it = Numbers.begin(); it != Numbers.end(); it++) cout << *it << " " ; cout << " }\n" << endl ; //insert an element in the heap Numbers.push_back(7) ; push_heap(Numbers.begin(), Numbers.end()) ; // you need to call make_heap to re-assert the // heap property make_heap(Numbers.begin(), Numbers.end()) ; cout << "After calling push_heap and make_heap\n" << endl ; // print content of Numbers cout << "Numbers { " ; for(it = Numbers.begin(); it != Numbers.end(); it++) cout << *it << " " ; cout << " }\n" << endl ; // remove the root element from the heap Numbers pop_heap(Numbers.begin(), Numbers.end()) ; cout << "After calling pop_heap\n" << endl ; // print content of Numbers cout << "Numbers { " ; for(it = Numbers.begin(); it != Numbers.end(); it++) cout << *it << " " ; cout << " }\n" << endl ; } Program Output Numbers { 4 10 70 10 30 69 96 100 } After calling make_heap Numbers { 100 30 96 10 4 69 70 10 } After calling sort_heap Numbers { 4 10 10 30 69 70 96 100 } After calling push_heap and make_heap Numbers { 100 69 96 30 4 70 10 10 7 } After calling pop_heap Numbers { 96 69 70 30 4 7 10 10 100 } Sample for Predicate Version // disable warning C4786: symbol greater than 255 character, // okay to ignore #pragma warning(disable: 4786) #include <iostream> #include <algorithm> #include <functional> #include <vector> using namespace std; void main() { const int VECTOR_SIZE = 8 ; // Define a template class vector of int typedef vector<int > IntVector ; //Define an iterator for template class vector of strings typedef IntVector::iterator IntVectorIt ; IntVector Numbers(VECTOR_SIZE) ; IntVectorIt it ; // Initialize vector Numbers Numbers[0] = 4 ; Numbers[1] = 10; Numbers[2] = 70 ; Numbers[3] = 10 ; Numbers[4] = 30 ; Numbers[5] = 69 ; Numbers[6] = 96 ; Numbers[7] = 100; // print content of Numbers cout << "Numbers { " ; for(it = Numbers.begin(); it != Numbers.end(); it++) cout << *it << " " ; cout << " }\n" << endl ; // convert Numbers into a heap make_heap(Numbers.begin(), Numbers.end(), greater<int>()) ; cout << "After calling make_heap\n" << endl ; // print content of Numbers cout << "Numbers { " ; for(it = Numbers.begin(); it != Numbers.end(); it++) cout << *it << " " ; cout << " }\n" << endl ; // sort the heapified sequence Numbers sort_heap(Numbers.begin(), Numbers.end(), greater<int>()) ; cout << "After calling sort_heap\n" << endl ; // print content of Numbers cout << "Numbers { " ; for(it = Numbers.begin(); it != Numbers.end(); it++) cout << *it << " " ; cout << " }\n" << endl ; make_heap(Numbers.begin(), Numbers.end(), greater<int>()) ; //insert an element in the heap Numbers.push_back(7) ; push_heap(Numbers.begin(), Numbers.end(), greater<int>()) ; cout << "After calling push_heap()\n" << endl; // print content of Numbers cout << "Numbers { " ; for(it = Numbers.begin(); it != Numbers.end(); it++) cout << *it << " " ; cout << " }\n" << endl ; //remove the root element from the heap Numbers pop_heap(Numbers.begin(), Numbers.end(), greater<int>()) ; cout << "After calling pop_heap\n" << endl ; // print content of Numbers cout << "Numbers { " ; for(it = Numbers.begin(); it != Numbers.end(); it++) cout << *it << " " ; cout << " }\n" << endl ; } Program Output Numbers { 4 10 70 10 30 69 96 100 } After calling make_heap Numbers { 4 10 69 10 30 70 96 100 } After calling sort_heap Numbers { 100 96 70 69 30 10 10 4 } After calling push_heap() Numbers { 4 7 10 30 100 10 70 96 69 } After calling pop_heap Numbers { 7 30 10 69 100 10 70 96 4 }
Privacy Policy
|
Link to Us
|
Links