16
Level up your coding skills with the C++ Standard Template Library (STL): Algorithms: I BY JOYJIT CHOUDHURY

Algorithms: I

Embed Size (px)

Citation preview

Page 1: Algorithms: I

Level up your coding skills with

the C++ Standard Template

Library (STL):

Algorithms: I

BY JOYJIT CHOUDHURY

Page 2: Algorithms: I

Algorithms

In the C++ Standard Library, algorithms are components

that perform algorithmic operations on containers and

other sequences

The C++ standard provides some standard algorithms collected in the <algorithm> standard header. A handful

of algorithms are also in the <numeric> header

All algorithms are in the std namespace

Page 3: Algorithms: I

Sort

sort(), sorts the elements in the range [first, last)

The sort is performed by, either using the < operator

(resulting in an ascending order), or a Boolean “compare

function” (aka. Binary Predicate) passed as an argument

to the sort function.

Time Complexity : O(N*logN)

Works on containers which provide random access

iterators: vector, deque, array

Defined in the header <algorithm>

Belongs to the namespace std

Page 4: Algorithms: I
Page 5: Algorithms: I

So, what is this ‘Binary Predicate’?

Sorting is a result of comparisons. This “compare - binary predicate”

decides where the elements are put after each comparison

Think of it as a function, which is passed any two elements from the sequence and this function returns a true or false, depending on

which the relative ordering (which element in the pair comes first, and

which comes second) of each of these pair of elements in the final

sorted sequence, is defined

In binary predicate, binary stands for the fact that it accepts two

elements as input, and predicate indicates that it produces a booleanoutput, i.e. true or false

Page 6: Algorithms: I

This binary predicate is passed two elements of the type contained in sequence. It returns true if the first

argument goes before the second argument in the ordering it defines, false otherwise.

The binary predicate in the form of a function is given

here

Page 7: Algorithms: I

Let’s take for example:

Now we create a vector containing objects of stuff class and insert a few values :

a = 23 b = 34

a = 43 b = 2

a = 23 b = 98

a = 1 b = 2

a = 45 b = 54myV

Page 8: Algorithms: I

Sort the elements of myV in the descending order of it’s data member int b

The global function compare :

After calling sort() and passing compare as the third argument :

a = 23 b = 98

a = 45 b = 54

a = 23 b = 34

a = 43 b = 2

a = 1 b = 2

myV

Page 9: Algorithms: I

struct as a binary predicate

A function isn’t the only way to define a binary

predicate

It can also be done by creating a struct

Defining the struct’s ()operator (which is done similar to

a function definition)

And then passing an object of this struct as the third

parameter to sort()

Page 10: Algorithms: I

From the previous example, the binary predicate could also be defined as a struct

Page 11: Algorithms: I
Page 12: Algorithms: I

Using templates

Suppose you want to sort a vector in descending order, it might contain data of int, float or char or some other type

Do you write separate functions/structs for the different types

?

No. You can use templates to create a generic

function/struct and use it accordingly

Page 13: Algorithms: I
Page 14: Algorithms: I

Achieving a descending order of elements in a container can be made even easier by the use of std::greater

It’s a binary function object class whose call returns whether the its first argument compares greater than the second (as returned by

operator >)

Which is exactly what our compare function/struct did in the

previous example

Page 15: Algorithms: I

That’s not all. There are many other functions

and techniques that could come in handy.

Read about them on cplusplus.com or

cppreference.com or somewhere else. Just

google it!

Page 16: Algorithms: I