This write-up will explain different Associative containers, their respective features and mainly their appropriate use-cases. Elements in associative containers are referenced by their key and not by their absolute position in the container.
Set
- Features:
- Value is itself the Key
- Unique Elements(=Keys)
- No two elements in the container can have Equivalent Keys.
- Each Value must be Unique
- Value of an element CANNOT be Modified once inserted (i.e. elements are always constant)
- Elements CAN be Inserted/Deleted from set
- Follows Specific Order (Sorted)
- elements in a set are always Sorted following a specific “Strict Weak Ordering” criterion indicated by its internal comparison object (of type Compare).
- Sets are typically implemented as “Binary Search Trees”.
- Set is Slower than Unordered_set.
set vs unordered_set:
- std::set is generally Slower than unordered_set in order to access individual elements by their key.
- std::set allow Direct Iteration on subsets based on their order.
Sets Decision Criteria:
- Key:Value Same, i.e. Keys Only
- Key:Value pair (Kind of)
- NO Duplicates
- NO Modification once inserted
- Sorted in Order (of Keys)
- Order is important
- Need to find element by Keys
Multiset:
- Features:
- All features as of set, except following:
- Multiple equivalent keys
- Multiple elements in the container can have equivalent keys.
- Multiple elements can have equivalent values.
Sets Decision Criteria:
- Key:Value Same, i.e. Keys Only
- Key:Value pair (Kind of)
- NO Modification once inserted
- Sorted in Order (of Keys)
- Order is important
- Need to find element by Keys
- Duplicates Allowed
- Note:
- this container is not defined in its own header, but shares header
with set.
- this container is not defined in its own header, but shares header
Unordered_set
- Features:
- All Same features as of set, except following:
- NO particular Order (NO Sorting)
- Organized into buckets depending on their “Hash Values”, which allow for Fast Retrieval of individual elements based on their value.
- NO particular Order (NO Sorting)
- Less efficient than set, in terms of Iteration of elements
- Keys are Immutable.
- All Same features as of set, except following:
Unordered_Multiset:
- Features:
- Everything same as unordered_set, except:
- Multiple equivalent keys
- Multiple elements in the container can have equivalent keys.
- Multiple elements can have equivalent values.
- Elements with equivalent values are grouped together in the same bucket and in such a way that an iterator (see equal_range) can iterate through all of them.
- Note:
- this container is not defined in its own header, but shares header
with unordered_set.
- this container is not defined in its own header, but shares header