終于有機(jī)會(huì)有動(dòng)力有能力看jjhou的《STL源碼解析》了。采取快速翻閱模式,有望看完整本。 map和set的底層機(jī)制都是RB-Tree(紅黑樹(shù)),插入和查找都是O(lgN)的復(fù)雜度。map、set以前聽(tīng)說(shuō)過(guò),但從來(lái)不用,因?yàn)椴涣私猓恢辣澈笫鞘裁础Mㄟ^(guò)讀這本書(shū)了解到了其
終于有機(jī)會(huì)有動(dòng)力有能力看jjhou的《STL源碼解析》了。采取快速翻閱模式,有望看完整本。
map和set的底層機(jī)制都是RB-Tree(紅黑樹(shù)),插入和查找都是O(lgN)的復(fù)雜度。map、set以前聽(tīng)說(shuō)過(guò),但從來(lái)不用,因?yàn)椴涣私猓恢辣澈笫鞘裁础Mㄟ^(guò)讀這本書(shū)了解到了其背后的機(jī)制,也許在將來(lái)會(huì)用一用。
multimap和multiset沒(méi)什么,只是對(duì)map和set的小修改而已。
除了這些,還有hash_map、hash_set,其底層機(jī)制不是RB-Tree,而是hash table。
了解到這些之后,map、set這些,都不神秘,都可控了。
目前還有一點(diǎn)需要再動(dòng)手捉摸下:內(nèi)存管理。STL的simple_allocator可定制行到底如何,得看看。
關(guān)于stl使用,最好的參考書(shū)莫過(guò)于cplusplus.com了
再扯一句OceanBase與STL。
OceanBase中幾乎沒(méi)有使用任何stl提供的功能,基本是在重復(fù)“發(fā)明輪子”,不過(guò)這種發(fā)明某種程度上我覺(jué)得看上去是合理的,比如:返回碼、錯(cuò)誤碼的定制,這一點(diǎn)就具有很大的靈活性;內(nèi)存使用方面可定制性也大很多;另外,也輕量很多;再另外,STL的接口也用得蠻頭疼,一大段代碼,全圍著接口轉(zhuǎn)了,也有辦法不圍著,多用用typedef就會(huì)看上去好很多。為什么OceanBase不用STL呢?我想,本質(zhì)原因還是我們有一群很牛逼的工程師,有能力寫(xiě)出經(jīng)得起考驗(yàn)的底層代碼。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com