C++標準模板庫(STL)是C++編程中十分重要的一部分,其中的multiset容器能夠讓我們方便快捷地維護一系列有序元素。在本文中,我們將從多個方面對multiset做詳細的闡述,包括它的定義、創建、插入、遍歷、查找和刪除等操作。
一、multiset概述
C++的multiset容器是一個集合容器,可以容納有序的、可能重複的元素。multiset可以通過比較元素大小來實現元素的排序,並且可以快速查找某一元素。multiset中的元素由鍵值唯一區分,不同於vector、list等容器,其中的元素沒有重複。下面我們將通過代碼樣例來看看multiset的基本用法。
#include <set>
#include <iostream>
using namespace std;
int main() {
multiset<int> ms;
ms.insert(3);
ms.insert(2);
ms.insert(5);
ms.insert(4);
ms.insert(2);
for (auto it = ms.begin(); it != ms.end(); it++) {
cout << *it << " ";
}
//輸出:2 2 3 4 5
ms.erase(ms.find(2));
for (auto it = ms.begin(); it != ms.end(); it++) {
cout << *it << " ";
}
//輸出:3 4 5
return 0;
}
二、multiset的構造和插入
multiset可以使用默認構造函數創建,也可以通過已有元素構造。multiset可以通過insert函數進行元素的插入,也可以通過多種插入方式進行元素插入。
1. 創建multiset
下面我們通過代碼樣例來展示multiset的創建過程。
//使用默認構造函數創建multiset
multiset<int> ms;
//使用multiset的範圍構造函數進行構造
int arr[] = { 3, 2, 5, 4 };
multiset<int> ms(arr, arr + 4);
2. multiset的插入
multiset的插入可以使用insert函數、emplace函數、insert迭代器範圍和插入初始化列表等多種方式進行。其中,insert的重載版本可以使用迭代器、元素和元素範圍等參數進行插入。
//使用insert函數插入單個元素
multiset<int> ms;
ms.insert(3);
//使用insert迭代器範圍插入元素
int arr[] = { 2, 5, 4 };
ms.insert(arr, arr + 3);
//使用emplace函數插入元素
ms.emplace(2);
//使用initializer_list進行插入
ms.insert({ 5, 6, 4 });
三、multiset元素遍歷
multiset中的元素遍歷可以使用迭代器實現。multiset中的元素是按照鍵值有序排列的,因此在遍歷時元素的順序也是有序的。
multiset<int> ms;
ms.insert(3);
ms.insert(2);
ms.insert(5);
//使用迭代器遍歷multiset中的元素
for (auto it = ms.begin(); it != ms.end(); it++) {
cout << *it << " ";
}
//輸出: 2 3 5
四、multiset中的查找和刪除
multiset中的查找可以使用find函數進行查找,刪除可以使用erase函數進行刪除。multiset中的find函數實際上返回一個迭代器,若找到指定元素,則返回該元素的迭代器,否則返回multiset的end迭代器。
multiset<int> ms;
ms.insert(3);
ms.insert(2);
ms.insert(5);
//查找某一元素
auto it = ms.find(2);
if (it != ms.end()) {
cout << *it << endl;
}
//輸出:2
//刪除某一元素
ms.erase(ms.find(2));
for (auto it = ms.begin(); it != ms.end(); it++) {
cout << *it << " ";
}
//輸出:3 5
五、multiset的應用場景
multiset廣泛應用於C++編程中的算法和數據結構中,例如在進行排序時經常使用multiset,multiset能快速進行元素的查找和插入操作。在C++STL庫中,map、set、multimap和multiset等容器都採用紅黑樹的數據結構來實現,其中multiset正是基於紅黑樹的有序容器。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/232326.html
微信掃一掃
支付寶掃一掃