生活随笔
收集整理的這篇文章主要介紹了
阿里Set
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上次面阿里巴巴。面試官問了我這樣一個問題,“C++ STL中的set是如何實現的”。當時只答了二叉樹,回來查下書,原來一般是紅黑樹,后悔沒好好記住啊。。。
接著,面試官又考了我一道這樣的編程題:定義一個Student結構體,包括name和age等數據,要求編程實習在set中查找一個name == "張三",?age == 13的操作。
本來set自己用得不多,當時一下懵了。回來查閱《C++標準程序庫》這本書,自己試著實現了下。
#include?<iostream>??#include?<set>??using?namespace?std;????/*Student結構體*/??struct?Student?{??????string?name;??????int?age;??????string?sex;??};????/*“仿函數"。為Student?set指定排序準則*/??class?studentSortCriterion?{??????public:??????????bool?operator()?(const?Student?&a,?const?Student?&b)?const?{??????????????/*先比較名字;若名字相同,則比較年齡。小的返回true*/??????????????if(a.name?<?b.name)??????????????????return?true;??????????????else?if(a.name?==?b.name)?{??????????????????if(a.age?<?b.age)??????????????????????return?true;??????????????????else??????????????????????return?false;??????????????}?else??????????????????return?false;??????????}??};????int?main()??{??????set<Student,?studentSortCriterion>?stuSet;????????Student?stu1,?stu2;??????stu1.name?=?"張三";??????stu1.age?=?13;??????stu1.sex?=?"male";????????stu2.name?=?"李四";??????stu2.age?=?23;??????stu2.sex?=?"female";????????stuSet.insert(stu1);??????stuSet.insert(stu2);????????/*構造一個測試的Student,可以看到,即使stuTemp與stu1實際上并不是同一個對象,??????*但當在set中查找時,仍會查找成功。這是因為已定義的studentSortCriterion的緣故。??????*/??????Student?stuTemp;??????stuTemp.name?=?"張三";??????stuTemp.age?=?13;????????set<Student,?studentSortCriterion>::iterator?iter;??????iter?=?stuSet.find(stuTemp);??????if(iter?!=?stuSet.end())?{??????????cout?<<?(*iter).name?<<?endl;??????}?else?{??????????cout?<<?"Cannot?fine?the?student!"?<<?endl;??????}????????return?0;??}??
總結
以上是生活随笔為你收集整理的阿里Set的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。