第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

std:map中的浮點(diǎn)鍵

std:map中的浮點(diǎn)鍵

C++
慕哥9229398 2019-12-03 14:38:12
以下代碼應(yīng)3.0在std::map存在的密鑰中找到密鑰。但是由于浮點(diǎn)精度,將無法找到它。map<double, double> mymap;mymap[3.0] = 1.0;double t = 0.0;for(int i = 0; i < 31; i++){  t += 0.1;  bool contains = (mymap.count(t) > 0);}在上面的示例中,contains將始終為false。我當(dāng)前的解決方法是乘以t0.1而不是加0.1,如下所示:for(int i = 0; i < 31; i++){  t = 0.1 * i;  bool contains = (mymap.count(t) > 0);}現(xiàn)在的問題是:std::map如果我使用double鍵,是否可以將FuzzyCompare引入?浮點(diǎn)數(shù)比較的常見解決方案通常是a-b < epsilon。但是我看不到使用來實(shí)現(xiàn)此目的的簡單方法std::map。我是否真的必須將double類型封裝在類中并重寫operator<(...)才能實(shí)現(xiàn)此功能?
查看完整描述

3 回答

?
長風(fēng)秋雁

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;


查看完整回答
反對 回復(fù) 2019-12-03
?
慕容森

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)成壓力測試此問題的方法。


查看完整回答
反對 回復(fù) 2019-12-03
  • 3 回答
  • 0 關(guān)注
  • 946 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號