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-hant/n/232326.html