3 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
您可以實(shí)現(xiàn)自己的比較功能。
#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貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊
這是使用軟比較(又稱epsilon或幾乎相等)如何導(dǎo)致問題的簡化示例。
讓我們epsilon = 2為簡單起見。把1和4到您map。現(xiàn)在看起來像這樣:
1
\
4
所以,1是樹的根。
現(xiàn)在,擺在數(shù)2,3,4的順序。每個(gè)都將替換根,因?yàn)樗c根相等。所以你有
4
\
4
已經(jīng)壞了 (假設(shè)沒有試圖重新平衡樹而成。)我們可以跟上去5,6,7:
7
\
4
甚至更糟,因?yàn)楝F(xiàn)在如果我們詢問是否4在其中,它會(huì)說“ no”,并且如果我們要求一個(gè)小于的值的迭代器7,則不會(huì)包含4。
盡管我必須說,我過去曾map多次使用基于此模糊比較運(yùn)算符的s,而且每當(dāng)我發(fā)現(xiàn)一個(gè)bug時(shí),都不會(huì)因此而來。這是因?yàn)槲业膽?yīng)用程序區(qū)域中的數(shù)據(jù)集實(shí)際上從不構(gòu)成壓力測試此問題的方法。
- 3 回答
- 0 關(guān)注
- 946 瀏覽
添加回答
舉報(bào)