Skip to main content

STL - Map keys difference

Today, I would like to show how to quickly find difference between two maps of STL library basing on keys only. We need to compare two maps of STL library and find third map which will contain only those elements of first map which keys are not being placed within second map.

Take a look on code: Output of this code is:

In point I we are defining struct type having overloaded of operator(). This structure will be used as function object to compare two elements of maps (std::pair) basing on keys only.

In point II we are defining two maps which will be compared. We are going to receive all std::pairs from firstMap which keys are not being placed within secondMap.

In point II we are declaring diffMap map which will contain result of our differentiation.

Point IV is key point of our function. In that point we are using std::set_difference algorithm. This algorithm returns difference of two ranges of STL containers. First 4 arguments are begins and ends of two ranges of containers which should be compared. 5th argument is inserter of different element. This inserter will fulfill our diffMap map which will contain difference which we are looking for. For most of STL containers those 5 arguments are enough for comparison and finding difference. However if want to compare keys of map only, we need to redefine our comparison function. In order to do that we are using overloaded operator() of struct comparatorStruct defined in point I.

That's it. In point V we are displaying our difference map using C++11 auto type.

As usual, if you would like to download that code and compile it you can find it (as other codes used in this blog) on our github account here: mapKeysDifference

Comments

  1. Thanks for this example. It helped me today in part of my project.

    ReplyDelete

Post a Comment

Popular posts from this blog

STL - count and count_if algorithms

One of the basic and most useful STL algorithms is algorithm which can be used to count number of elements within selected container according to specified criteria. In order to do that we can use std::count or std::count_if algorithm. std::count (firstElementIterator, lastElementIterator, elementForSearch) - is function which will go through container using firstElementIterator and lastElementIterator and return number of container elements which value is equal elementForSearch std::count_if (firstElementIterator, lastElementIterator, UnaryPredicateFunction) - is function which examine range from firstElementIterator to lastElementIterator and return number of container elements which fulfill UnaryPredicateFunction criteria. UnaryPredicateFunction is function having following signature: bool functionName(const Type& a) . So, count_if returns number of elements where UnaryPredicateFunction returns true for. For better understanding let's take a...

C++ Multithreading - Race conditions

In the previous C++ Multithreading article I presented you how to pass parameters between threads. Take a detail look on the output of that example once again: In the first line of that output you can notice that output text from two threads is mixed. You are probably wondering why it happens? It is because we are not protecting resources which are shared by two threads (in this example cout stream is shared in both threads) which causes multithreading's phenomenon called race condition . Because threads switching and accessing to shared resources are managed by operating system we do not know when std::cout stream will be accessed by main thread and when it will be accessed by second thread. Therefore in the previous article I mentioned that output of the example can be little different on your computer than my output example. What's more it is possible that this output will be different for few consecutive invoking of the example on the same machine. It is beca...

C++14 - Tuple addressing via type

Today I would like to introduce one of new features which will arrive to C++ with new language standard (C++14) which is going to be release in 2014. In order to compile example from this article you need to have compiler supporting C++14 standard. The newest version of GCC supports it. I would like to introduce you features called Tuple addressing via type which allows us to get tuple element value using type name instead of tuple parameter number. Of course it is possible only for type names which are not ambiguous. Let's take a look on below example for better understanding: In point I we are declaring our tuple type containng of 2 int elements and on string element. In point II we are using std::get function to get values of our tuple typed variable using tuple parameters numbers. This feature is well known from C++11 standard. Point III shows new (introduced in C++14 standard) way of getting values of tuple elements. We are getting string type element using...