Summary
As we mentioned in the introduction, the lookup problem is encountered in most applications in one way or the other. We can use deterministic as well as probabilistic solutions as per our needs. In this chapter, we implemented and saw how we can use both of them. In the end, we also looked at an example of built-in containers for hashing in C++. These containers are extremely useful while we're writing applications as we don't need to implement them ourselves every time and for every type. A simple rule of thumb is this: if we can see a lot of function calls to the find function for the container, we should go for a lookup-based solution.
So far, we've seen how we can store data in various types of data structures and perform some basic operations. In the upcoming chapters, we'll look at various types of algorithm design techniques so that we can optimize those operations, starting with divide and conquer.