You are here: Home > 技術…… > 原來MS的hash_set内部是個list

原來MS的hash_set内部是個list

今天爲了實現一個新功能,爲了不引發效率問題,決定把一個容器從std::list改爲stdext::hash_set。

這個類一開始不是我寫的,那個容器的聲明沒有用typede一個類型來,我接手以後,由於這個容器在代碼裏面要遍歷的點沒幾個,我也懶得重搆了,就一直沒有動它。

這次我就想順便改了,首先改聲明,從list改爲hash_set。然後編譯,準備從編譯錯誤裏面定位遍歷這幾個容器的點。

但是。。。。。居然編譯通過了。。。。一運行,也沒有任何問題……嗯?

後來看了看源代碼,才發現原來Microsoft的STL内部的hash_set居然是用list來實現的!

也就是說,hash_set的insert()、remove()、find()方法,效率不會太高……我特意看了看源代碼,果然如此……無語了……改天還是把hash_set換回set吧……這太不靠譜了……

結論就是,對於Windows API、第三方類庫之類的調用,千萬不要想當然,還是要看看實現(如果有的話),如果沒有的話,看相關文檔……

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注