3 回答

TA貢獻1757條經驗 獲得超7個贊
您可以實現自己的比較功能。
#include <functional>
class own_double_less : public std::binary_function<double,double,bool>
{
public:
own_double_less( double arg_ = 1e-7 ) : epsilon(arg_) {}
bool operator()( const double &left, const double &right ) const
{
// you can choose other way to make decision
// (The original version is: return left < right;)
return (abs(left - right) > epsilon) && (left < right);
}
double epsilon;
};
// your map:
map<double,double,own_double_less> mymap;

TA貢獻1853條經驗 獲得超18個贊
這是使用軟比較(又稱epsilon或幾乎相等)如何導致問題的簡化示例。
讓我們epsilon = 2為簡單起見。把1和4到您map?,F在看起來像這樣:
1
\
4
所以,1是樹的根。
現在,擺在數2,3,4的順序。每個都將替換根,因為它與根相等。所以你有
4
\
4
已經壞了 (假設沒有試圖重新平衡樹而成。)我們可以跟上去5,6,7:
7
\
4
甚至更糟,因為現在如果我們詢問是否4在其中,它會說“ no”,并且如果我們要求一個小于的值的迭代器7,則不會包含4。
盡管我必須說,我過去曾map多次使用基于此模糊比較運算符的s,而且每當我發現一個bug時,都不會因此而來。這是因為我的應用程序區域中的數據集實際上從不構成壓力測試此問題的方法。
- 3 回答
- 0 關注
- 968 瀏覽
添加回答
舉報