国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

set容器

2019-11-14 12:50:14
字體:
來源:轉載
供稿:網(wǎng)友
平衡二叉檢索樹的檢索使用中序遍歷算法,檢索效率高于vector、deque 和list 等容器。另外,采用中序遍歷算法可將鍵值由小到大遍歷出來,所以,可以理解為平衡二叉檢索樹在插入元素時,就會自動將元素按鍵值由小到大的順序排列對于 set 容器中的鍵值,不可直接去修改。因為如果把容器中的一個鍵值修改了,set容器會根據(jù)新的鍵值旋轉子樹,以保持新的平衡,這樣,修改的鍵值很可能就不在原先那個位置上了。換句話來說,構造set 集合的主要目的就是為了快速檢索。頭文件:#include <set>   創(chuàng)建對象:set<int> s;采用 insert()方法把元素插入集合中去,插入的具體規(guī)則在默認的比較規(guī)則下,是按元素值由小到大插入,如果自己指定了比較規(guī)則函數(shù),則按自定義比較規(guī)則函數(shù)插入。使用前向迭代器對集合中序遍歷,其結果正好是元素排序的結果。#include <set>#include <iostream>using namespace std;int main(int argc, char* argv[]){//定義元素類型為int 的集合對象s,當前沒有任何元素set<int> s;//插入了5 個元素,但由于8 有重復,第二次插入的8 并沒有執(zhí)行s.insert(8);//第一次插入8,可以插入s.insert(1);s.insert(12);s.insert(6);s.insert(8);//第二次插入8,重復元素,不會插入//中序遍歷集合中的元素set<int>::iterator it;//定義前向迭代器//中序遍歷集合中的所有元素for(it=s.begin();it!=s.end();it++){cout<<*it<<" ";}cout<<endl;//回車換行return 0;}運行結果:1 6 8 12元素的反向遍歷:使用反向迭代器 reverse_iterator 可以反向遍歷集合,輸出的結果正好是集合元素的反向排序結果。它需要用到rbegin()和rend()兩個方法,它們分別給出了反向遍歷的開始位置和結束位置。//反向遍歷集合中的元素set<int>::reverse_iterator rit;//定義反向迭代器for(rit=s.rbegin();rit!=s.rend();rit++){cout<<*rit<<" ";}元素的刪除:與插入元素的處理一樣,集合具有高效的刪除處理功能,并自動重新調整內部的紅黑樹的平衡。刪除的對象可以是某個迭代器位置上的元素、等于某鍵值的元素、一個區(qū)間上的元素和清空集合。set<int> s;//插入了5 個元素,但由于8 有重復,第二次插入的8 并沒有執(zhí)行s.insert(8);//第一次插入8,可以插入s.insert(1);s.insert(12);s.insert(6);s.insert(8);//第二次插入8,重復元素,不會插入//刪除鍵值為6 的那個元素s.erase(6);輸出:1  8 12元素的檢索 :使用 find()方法對集合進行搜索,如果找到查找的鍵值,則返回該鍵值的迭代器位置,否則,返回集合最后一個元素后面的一個位置,即end()。set<int>::iterator it;//定義前向迭代器//查找鍵值為6 的元素it=s.find(6);if(it!=s.end())//找到cout<<*it<<endl;                     //it相當于地址,,如果找到了,這里輸出的是元素本身自定義比較函數(shù):(1)如果元素不是結構體,那么,可以編寫比較函數(shù)。//自定義比較函數(shù)myComp,重載“()”操作符                ,該函數(shù)使鍵值從大到小排列struct myComp{bool Operator()(const int &a,const int &b){if(a!=b)return a>b;elsereturn a>b;}};set<int,myComp>::iterator it;//定義前向迭代器for(it=s.begin();it!=s.end();it++){cout<<*it<<" ";}(2)如果元素是結構體,那么,可以直接把比較函數(shù)寫在結構體內。struct Info{string name;float score;//重載“<”操作符,自定義排序規(guī)則bool operator < (const Info &a) const{//按score 由大到小排列。如果要由小到大排列,使用“>”號即可。return a.score<score;}};int main(int argc, char* argv[]){//定義元素類型為Info 結構體的集合對象s,當前沒有任何元素set<Info> s;//定義Info 類型的元素Info info;//插入3 個元素info.name="Jack";info.score=80.5;s.insert(info);info.name="Tomi";info.score=20.5;s.insert(info);info.name="Nacy";info.score=60.5;s.insert(info);set<Info>::iterator it;//定義前向迭代器for(it=s.begin();it!=s.end();it++){cout<<(*it).name<<" : "<<(*it).score<<endl;}return 0;}運行:Jack : 80.5Nacy : 60.5Tomi : 20.5
上一篇:jquery 方法

下一篇:golang基礎

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 田阳县| 故城县| 达州市| 元氏县| 外汇| 洪雅县| 邻水| 泸州市| 肇源县| 北流市| 金坛市| 安丘市| 双牌县| 陵水| 巩义市| 金沙县| 平安县| 柳林县| 峨边| 江陵县| 项城市| 洞口县| 崇信县| 易门县| 乾安县| 九龙城区| 醴陵市| 定州市| 克拉玛依市| 运城市| 泰顺县| 灵川县| 舒兰市| 万荣县| 微山县| 澄城县| 隆昌县| 车险| 十堰市| 华坪县| 玛多县|