C++C++11C++14C++17C++20Learn C++Syntax

What Is Multiset (std::multiset) In Modern C++?

What Is Multiset stdmultiset In Modern C++

In C++, containers are powerful data storage arrays and they are very useful to iterate and search. A container is a holder object that stores data elements (a collection of data objects) such as std::array, std::vector, std::map. There is another useful container std::multiset, in this post, we explain what std::multiset is. Before that let’s remind ourselves what containers are in C++ programming and what are their types. Here is a simple example of the set of int keys.

What is a container in modern C++?

Containers are modern data storage arrays in modern C++ and they are very useful to iterate and search data with their amazing methods and properties.

A container is a holder object that stores data elements (a collection of data objects). They are implemented as a class template to define objects that can be used with modern rules of C++ (The rule of 6). They allow great flexibility in the different data types supported as elements. Moreover, they can be used with int, float, double, etc. or with struct types, they can be used with other modern types of C++, lambdas and templates. Thus, the developer can create different data sets in memory, these can be static or dynamic, they are safe and well optimized.

What are the basic container types modern C++?

The C++ Standards library defines 4 container types. 

  • Sequence Containers ( vector, array, deque, list, forward_list )
  • Associative Containers ( map, multimap, set, multiset )
  • Unordered Associative Containers ( unordered_map, unordered_multimap, unordered_set, unordered_multiset )
  • Container Adapters  ( stack, queue, priority_queue )

If you want to learn more about these each type, here are some basic details.

What is std::multiset in modern C++?

The multiset (std::multiset) is an associative container defined in <set> header that contains objects in a key type where key values can be the same values (multiple), and they are sorted. This container sorts members by using the Compare key comparison class. Multisets are used to list multiple key values in sorted order, i.e. { 1, 1, 4, 4, 4, 7, 7, 10}, you can search and count them easily too. Note that the std::multiset is used for multiple keys, while the std::set is used for unique keys. We can use the find method to search, the erase method to remove a member, and insert, insert_range, and emplace methods to insert new members, each of these operations has logarithmic complexity.

Here is the general definition in the header multiset.

since C++17, it is defined in pmr namespace as below.

We can use begin(), end(), … iterations, and ranges to operate and list them. We can use the insert or insert_range() method to add new key values. There are many other useful modifier methods, such as: clear(), emplace(), erase(), swap(), extract(), merge() operations. There are other lookup methods in addition to the find method, such as, count, contains, equal_range, etc.

Is there a simple example of how to use std::multiset in modern C++?

Here is a simple example of the multiset of int keys.

As you see we define some key values and we added two more key values. Note that 23 is also defined before and it will be added as a new member of this multiset. Now, we can print all of them as we show below:

and the output will be like this:

Note that, members of std::multiset are automatically sorted, and 23 value is added as a new member.

Let’s see another example of the set of string keys:

We can list them like so:

Here is the output which is automatically sorted:

We can use find method to check if there is a member in this multiset.

We can count how many ”’Red” members we have in the following manner:

Is there a full example of how to use std::multiset in modern C++?

This example below includes all above and also if you are asking how you can use find() method to search a key value here is how you can do it:

Here is the output of this full example:

Note that in this example above, if you want exact color values to list and check, you can use hexadecimal values for color values too, such as 0xAABBCC.

As you see, multiset is a very useful container to sort multiple key values. If you want to list unique key values, then you should use set (std::set). If you want to use key values that point another type, then you can use std::map or std::multimap.

For more new details about std::set, you can check these papers P0083R3P0508R0

What Is Multiset stdmultiset In Modern C++ C++ logo

C++ Builder is the easiest and fastest C and C++ compiler and IDE for building simple or professional applications on the Windows operating system. It is also easy for beginners to learn with its wide range of samples, tutorials, help files, and LSP support for code. RAD Studio’s C++ Builder version comes with the award-winning VCL framework for high-performance native Windows apps and the powerful FireMonkey (FMX) framework for UIs.

There is a free C++ Builder Community Edition for students, beginners, and startups; it can be downloaded from here. For professional developers, there are Professional, Architect, or Enterprise versions of C++ Builder and there is a trial version you can download from here.

Oh hi there 👋
It’s nice to meet you.

Sign up to receive awesome C++ content in your inbox, every day.

We don’t spam! Read our privacy policy for more info.

About author

Dr. Yilmaz Yoru has 35+ years of coding with more than 30+ programming languages, mostly C++ on Windows, Android, Mac-OS, iOS, Linux, and some other operating systems. He graduated and received his MSc and PhD degrees from the Department of Mechanical Engineering of Eskisehir Osmangazi University. He is the founder and CEO of ESENJA LLC Company. His interests are Programming, Thermodynamics, Fluid Mechanics, Artificial Intelligence, 2D & 3D Designs, and high-end innovations.
Related posts
C++C++17Code SnippetGame DevelopmentLanguage FeatureLearn C++

What Is Skia In Modern C++?

C++C++17Learn C++

How To Use Skia in C++ Builder 12?

C++C++17C++20Introduction to C++Language FeatureLearn C++Syntax

Learn How To Use Clamp (std::clamp) In Modern C++ 17 and Beyond

C++C++11C++14C++17C++20Learn C++

What Is The Priority Queue (std::priority_queue) In Modern C++?