set集合容器實現了紅黑樹(red-black tree)的平衡二叉搜尋樹的資料結構,在插入元素時,它會自動調整二叉樹的排列,把該元素放到適當的位置,以確保每個子樹根節點的鍵值大於左子樹所有節點的鍵值,而小於右子樹所有檢點的鍵值;另外,還得確保根節點左子樹的高度與右子樹的高度相等,這樣,二叉樹的高度最小,從而搜尋速度最快。
set容器不會插入重複相同鍵值的元素,而採取忽略處理。下面網上找的一張set容器的
對於set容器中的鍵值,不可直接去修改。因為如果把容器中的乙個鍵值修改了,set容器會根據新的鍵值去旋轉子樹,不斷保持平衡。
而multiset多重集合容器與set一樣,也是使用紅黑樹來組織元素資料,唯一不同的是,multiset允許重複的元素鍵值插入,而set則不允許。
下面是網上找的一張multiset多重集合容器
set、multiset容器的基本操作:
#includesets; //集合容器
multisetms; //多重集合容器
/*插入元素n*/
s.insert(n);
ms.insert(n);
/*刪除元素n*/
s.erase(n);
ms.erase(n);
/*查詢元素n*/
s.find(n);
ms.erase(n);
/*清空容器*/
s.clear();
ms.clear();
/*返回容器個數*/
s.size();
ms.size();
元素的遍歷用到迭代器(反向迭代器)遍歷
嗯下面就是在vc中的測試:
#include#includeusing namespace std;
int main()
{ int j;
int ch;
int sum;
sets;
set::iterator it;
set::reverse_iterator rit;
printf("請輸入要插入元素個數:");
scanf("%d",&sum);
printf("請輸入要插入的元素:");
for(int i=0;i
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...
樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹
目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...
二叉樹,完全二叉樹,滿二叉樹
二叉樹 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。滿二叉樹 一顆深度為k且有2 k 1個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...