std::set and std::map keep keys sorted in a balanced tree—O(log n) operations. Use when you need ordered traversal or guaranteed log time without hash assumptions.
Container guide
unordered_set— unique keys, average O(1)set— unique sorted keys, O(log n)map— sorted key → valueunordered_map— hash key → value
Duplicate detection
#include
#include
#include
int main() {
std::vector a = {1, 2, 3, 2, 4};
std::unordered_set seen;
for (int x : a) {
if (seen.count(x)) {
std::cout << "duplicate: " << x << "\n";
break;
}
seen.insert(x);
}
return 0;
}
Ordered map iteration
std::map iterates keys in order—useful for sweep-line and coordinate compression previews.
Important interview questions and answers
- Q: set vs unordered_set?
A: set sorted O(log n); unordered_set average O(1) unsorted. - Q: multiset?
A: Allows duplicate keys with count—frequency beyond simple set.
Self-check
- When pick map over unordered_map?
- How detect first duplicate in O(n) average?
Pitfall: Using map when you only need fast lookup—unordered_map may be faster average case.
Interview prep
- map vs unordered_map?
map sorted O(log n); unordered_map hash average O(1).
- Duplicate check?
unordered_set insert—fail if exists.