РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
302 of 815 menu

Класс multiset

Класс multiset - это ассоциативный контейнер из библиотеки STL, который хранит элементы в отсортированном порядке и, в отличие от set, позволяет хранить одинаковые значения. Элементы внутри контейнера всегда упорядочены по возрастанию (или по заданному компаратору). При вставке элемента контейнер автоматически находит нужную позицию, чтобы сохранить порядок сортировки. Доступ к элементам осуществляется не по индексу, а с помощью итераторов. Поиск, вставка и удаление элементов выполняются за логарифмическое время O(log n).

Синтаксис

#include <set> std::multiset<тип> имя;

Для использования класса необходимо подключить заголовочный файл <set>. В угловых скобках указывается тип хранимых элементов. Например, multiset<int> хранит целые числа, а multiset<string> - строки.

Пример

Давайте создадим multiset с целыми числами и добавим в него несколько элементов, включая повторяющиеся:

#include <iostream> #include <set> using namespace std; int main() { multiset<int> ms; ms.insert(3); ms.insert(1); ms.insert(4); ms.insert(1); ms.insert(5); ms.insert(1); for (int elem : ms) { cout << elem << " "; } cout << endl; return 0; }

Результат выполнения кода:

1 1 1 3 4 5

Как видите, элементы автоматически отсортированы по возрастанию, а дубликаты числа 1 сохранены.

Пример

Давайте посчитаем, сколько раз встречается определённый элемент, используя метод count:

#include <iostream> #include <set> using namespace std; int main() { multiset<int> ms = {1, 2, 2, 3, 2, 4, 5}; cout << "Count of 2: " << ms.count(2) << endl; cout << "Count of 3: " << ms.count(3) << endl; cout << "Count of 6: " << ms.count(6) << endl; return 0; }

Результат выполнения кода:

"Count of 2: 3" "Count of 3: 1" "Count of 6: 0"

Метод count возвращает количество элементов с заданным значением. Если элемент не найден, возвращается 0.

Пример

Давайте удалим все вхождения определённого элемента с помощью метода erase:

#include <iostream> #include <set> using namespace std; int main() { multiset<int> ms = {1, 2, 2, 3, 2, 4, 5}; ms.erase(2); for (int elem : ms) { cout << elem << " "; } cout << endl; return 0; }

Результат выполнения кода:

1 3 4 5

Метод erase, вызванный со значением, удаляет все элементы, равные этому значению.

Смотрите также

  • класс map,
    который хранит пары ключ-значение
  • класс multimap,
    который хранит пары ключ-значение с дубликатами
  • метод insert,
    который добавляет элементы в контейнер
  • метод count,
    который подсчитывает количество элементов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить