2016-03-08 40 views
-2

使用下面的代碼我可以找到某個值的最低上界。我怎麼能做同樣的事情,但最大的劣勢呢?使用STL的地圖中最大的劣勢約束

double Sup(double const x) const { 
    //Lower bound: first element that is greater-or-equal. 
    map<double,double>::iterator it=MapCurve.lower_bound(x); 
    if (it!=MapCurve.end()) { 
     return it->first; 
    } else { 
     --it; 
     return it->first; 
    }   
} 

說你在地圖上有這些關鍵值:0.2 | 0.7 | 1.3 | 2.4 | 5.1

燮(1.2)給出1.3

現在我想和INF功能,使得天道酬勤(1.2)將給予0.7。我怎麼能這樣做?

+0

這不是[mcve]:我們無法猜測'MatCurve'是如何定義的。 – YSC

回答

1

lower_bound(x)給出第一個不在x之前的元素(即> =)。你想要以前的元素。

auto it = MapCurve.lower_bound(x); 
if (it == MapCurve.begin()) { 
    // No element less than x in the map. 
    // throw error or return error code. 
} 
--it; 
return it->first; 
+0

'lower_bound'和'upper_bound'都給出了更大的值,不同之處在於它們中的一個給出了更大的值。所以你的代碼仍然有更大的價值。我的問題是關於較小的值 –

+0

試一試。這個想法是採用以前的元素,它嚴格低於x(如果存在)。 – Sorin