是用在平衡二叉樹上查詢的演算法實現的,複雜度是O(logn)。STLport裡面的實現程式碼如下:_Base_ptr_M_find(const_KT&__k)const{_Base_ptr__y=__CONST_CAST(_Base_ptr,&this->_M_header._M_data);//Lastnodewhichisnotlessthan__k._Base_ptr__x=_M_root();//Currentnode.while(__x!=0)if(!_M_key_compare(_S_key(__x),__k))__y=__x,__x=_S_left(__x);else__x=_S_right(__x);if(__y!=&this->_M_header._M_data){if(_M_key_compare(__k,_S_key(__y))){__y=__CONST_CAST(_Base_ptr,&this->_M_header._M_data);}}return__y;}第二個問題,單獨使用的話,set應該比較快些(vector的話,要先來個排序然後再二分,估計速度也差不多),不過如果你用的編譯器新的話,能支援C++11的話,建議你用unordered_set應該可以更快些。要想速度更更快些的話,就不要用stl了,自己小心點實現個雜湊演算法應該可以辦到。
是用在平衡二叉樹上查詢的演算法實現的,複雜度是O(logn)。STLport裡面的實現程式碼如下:_Base_ptr_M_find(const_KT&__k)const{_Base_ptr__y=__CONST_CAST(_Base_ptr,&this->_M_header._M_data);//Lastnodewhichisnotlessthan__k._Base_ptr__x=_M_root();//Currentnode.while(__x!=0)if(!_M_key_compare(_S_key(__x),__k))__y=__x,__x=_S_left(__x);else__x=_S_right(__x);if(__y!=&this->_M_header._M_data){if(_M_key_compare(__k,_S_key(__y))){__y=__CONST_CAST(_Base_ptr,&this->_M_header._M_data);}}return__y;}第二個問題,單獨使用的話,set應該比較快些(vector的話,要先來個排序然後再二分,估計速度也差不多),不過如果你用的編譯器新的話,能支援C++11的話,建議你用unordered_set應該可以更快些。要想速度更更快些的話,就不要用stl了,自己小心點實現個雜湊演算法應該可以辦到。