Chapter 13 Standard Template Library STL II Data
Chapter 13 Standard Template Library (STL) II Data Structures Using C++ 1
Chapter Objectives • Learn more about the standard template library (STL) • Become familiar with the associative containers • Explore how associative containers are used to manipulate data in a program • Learn about various generic algorithms Data Structures Using C++ 2
Class pair The class pair has two constructors: the default constructor, and a constructor with two parameters. The general syntax to declare an object of the type pair is: where expr 1 is of the type Type 1 and expr 2 is of the type Type 2 Data Structures Using C++ 3
Relational Operators for the class pair Data Structures Using C++ 4
Type pair and Function make_pair The header file utility also contains the definition of the function template make_pair. With the help of the function make_pair, we can create pairs without explicitly specifying the type pair. template<class T 1, class T 2> pair<T 1, T 2> make_pair(const T 1& X, const T 2& Y) { return (pair<T 1, T 2>(X, Y)); } Data Structures Using C++ 5
Associative Containers in STL • Elements in associative container automatically sorted according to some ordering criteria • Default ordering criterion is relational operator < (less than) • Users can also specify their own ordering criterion • Predefined Associative Containers – – Sets Multisets Maps multimaps Data Structures Using C++ 6
Various Ways to Declare a Set/Multiset Container Data Structures Using C++ 7
Various Ways to Declare a Set/Multiset Container Data Structures Using C++ 8
Operations in a set or multiset Data Structures Using C++ 9
Associative Containers: map and multimap • Containers map and multimap manage their elements in the form key/value • Elements automatically sorted according to some sort criteria applied on key • Default sorting criterion is relational operator < (less than) • User can also specify other sorting criteria • For user-defined data types, relational operators must be properly overloaded Data Structures Using C++ 10
Associative Containers: map and multimap • Only difference between containers map and multimap is: container multimap allows duplicates, whereas the container map does not • The name of the class defining the container map is map; the name of the class defining the container multimap is multimap Data Structures Using C++ 11
Associative Containers: map and multimap • The name of the header file containing the definitions of the classes map and multimap, and the definitions of the functions to implement various operations on these containers, is map • Therefore, to use any of these containers, the program must include the following statement: #include <map> Data Structures Using C++ 12
Various Ways to Declare a map/multimap Container Data Structures Using C++ 13
Various Ways to Declare a map/multimap Container Data Structures Using C++ 14
Operations in a map/multimap Data Structures Using C++ 15
Containers, Header Files, and Iterators Data Structures Using C++ 16
Algorithms • Some operations very specific to container; provided as part of container definition • Generic algorithms common to all containers; contained in header file algorithm: – Find – Sort – Merge Data Structures Using C++ 17
STL Algorithm Classification • Nonmodifying algorithms – Investigate, do not modify elements of container • Modifying algorithms – Modify the elements of a container by rearranging, removing, or changing the values of the elements – Mutating algorithms: change order f elements but not their value Data Structures Using C++ 18
STL Algorithm Classification • Numeric algorithms – Designed to perform numeric calculations on elements • Heap algorithms – Implement heap sort Data Structures Using C++ 19
Nonmodifying Algorithms Data Structures Using C++ 20
Modifying Algorithms Data Structures Using C++ 21
Numeric and Heap Algorithms Data Structures Using C++ 22
Function Objects • To make the generic algorithms flexible, the STL usually provides two forms of an algorithm using the mechanism of function overloading • First form of algorithm uses natural operation to accomplish this goal • In second form, user can specify criteria based on which the algorithm processes the elements Data Structures Using C++ 23
Function Objects • A function object contains a function that can be treated as a function using the function call operator, () • A function object is a class template that overloads the function call operator, () • In addition to allowing you to create your own function objects, STL provides arithmetic, relational, and logical function objects • STL’s function objects contained in header file functional Data Structures Using C++ 24
Arithmetic STL Function Objects Data Structures Using C++ 25
Relational STL Function Objects Data Structures Using C++ 26
Relational STL Function Objects Data Structures Using C++ 27
Logical STL Function Objects Data Structures Using C++ 28
Predicates • Special types of function objects that return boolean values • Unary predicates check a specific property for a single argument • Binary predicates check a specific property for a pair of (two) arguments Data Structures Using C++ 29
Predicates • Typically used to specify a searching or sorting criterion • In STL, always return the same result for the same value • The functions that modify their internal states cannot be considered predicates Data Structures Using C++ 30
Insert Iterators • STL provides three insert iterators to insert elements at destination • Class vector does not support the push_front operation, this iterator cannot be used for a vector container Data Structures Using C++ 31
Insert Iterators • Back_inserter – Uses the push_back operation of the container in place of the assignment operator • Front_inserter – Uses the push_front operation of the container in place of the assignment operator • Inserter – Uses the container’s insert operation in place of the assignment operator Data Structures Using C++ 32
Functions and Their Uses • fill: used to fill a container with elements • fill_n: used to fill in the next n elements • generate and generate_n: used to generate elements and fill a sequence • find, find_if, find_end, and find_first_of: used to find the elements in a given range Data Structures Using C++ 33
Functions and Their Uses • remove: used to remove certain elements from a sequence • remove_if: used to remove certain elements from a sequence using some criterion Data Structures Using C++ 34
Functions and Their Uses • remove_copy: copies the elements in a sequence into another sequence by excluding certain elements from the first sequence • remove_copy_if: copies the elements in a sequence into another sequence by excluding certain elements, using some criterion, from the first sequence Data Structures Using C++ 35
Functions and Their Uses • swap, iter_swap, and swap_ranges: used to swap elements • search, search_n, sort, and binary_search: used to search elements • adjacent_find: used to find the first occurrence of consecutive elements satisfying a certain criterion Data Structures Using C++ 36
Algorithms • merge: merges two sorted lists • inplace_merge: used to combine two sorted, consecutive sequences • reverse: reverses the order of the elements in a given range • reverse_copy: reverses the order of the elements in a given range while copying into a destination range. The source is not modified Data Structures Using C++ 37
Algorithms • rotate: rotates the elements in a given range • rotate_copy: copies the elements of the source at the destination in a rotated order • count: counts the occurrences of a specified value in a given range • count_if: counts the occurrences of a specified value in a given range satisfying a certain criterion Data Structures Using C++ 38
Algorithms • max: used to determine the maximum of two values • max_element: is used to determine the largest element in a given range • min: used to determine the minimum of two values • min_element: used to determine the smallest element in a given range Data Structures Using C++ 39
Algorithms • random_shuffle: used to randomly order the elements in a given range • for_each: used to access and process each element in a given range by applying a function, which is passed as a parameter • transform: creates a sequence of elements by applying certain operations to each element in a given range Data Structures Using C++ 40
Algorithms • includes: determines whether the elements of one range appear in another range • set_intersection: used to find the elements that are common to two ranges of elements • set_union: used to find the elements that are contained in two ranges of elements • set_difference: used to find the elements in one range of elements that do not appear in another range of elements Data Structures Using C++ 41
Algorithms • set_symmetric_difference: given two ranges of elements, determines elements in first range but not the second, or in second range but not first • accumulate, adjacent_difference, inner_product, and partial_sum: numerical functions that manipulate numeric data Data Structures Using C++ 42
Chapter Summary • • Standard Template Library (STL) Associative Containers Operations on associative containers Function and algorithms on associative containers • Example usage of function and algorithms Data Structures Using C++ 43
- Slides: 43