#include <iostream>
#include <set>
#include <algorithm>
void printRange(const std::multiset<int>& ms, int lower, int upper) {
auto start = ms.lower_bound(lower);
auto end = ms.upper_bound(upper);
std::cout << "Elements in range [" << lower << ", " << upper << "]: ";
std::for_each(start, end, [](int n) { std::cout << n << " "; });
std::cout << std::endl;
}
int main() {
std::multiset<int> numbers = {1, 2, 3, 3, 4, 5, 5, 5, 6, 7, 8, 9, 9, 10};
std::cout << "All numbers: ";
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
// Demonstrate lower_bound and upper_bound
printRange(numbers, 3, 7);
// Count elements in a range
int rangeStart = 4, rangeEnd = 8;
auto startIt = numbers.lower_bound(rangeStart);
auto endIt = numbers.upper_bound(rangeEnd);
int count = std::distance(startIt, endIt);
std::cout << "Number of elements between " << rangeStart
<< " and " << rangeEnd << ": " << count << std::endl;
// Remove a range of elements
numbers.erase(numbers.lower_bound(5), numbers.upper_bound(8));
std::cout << "After removing range [5, 8]: ";
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}