1
我需要幫助能夠在運行時定義自定義std :: set比較器。我知道如何定義一個固定值的基本比較器。我真的被困在如何在運行時做到這一點。如果有幫助,我正在運行Visual Studio 2010。在運行時定義自定義比較器std :: set
下面是我的代碼:
#include <set>
struct CustomComp
{
CustomComp():m_tolerance(0.1){}
//Always assume tolerance >= 0.0
CustomComp(double const &tolerance):m_tolerance(tolerance){}
/*Only return true when the two number are sufficiently apart from each other*/
bool operator()(double const &n1, double const &n2)
{
double diff = n1 - n2;
if(diff < 0.0 && std::abs(diff) > m_tolerance) return true;
if(diff > 0.0 && std::abs(diff) > m_tolerance) return false;
return false;
}
private:
double m_tolerance;
};
int main(int argc, char **argv)
{
/*This works */
std::set<double, CustomComp> aaa;
aaa.insert(0.0);
aaa.insert(0.2);
aaa.insert(0.3);
aaa.insert(10.0);
/*What I really want*/
double tol = GetToleranceFromUser();
std::set<double, CustomComp(tol)> bbb;
return 0;
}
謝謝。
謝謝。我一直在閱讀std :: set文檔,並且這些時候我的眼前的答案是正確的。不知何故,我的大腦沒有把它拿起來。 – nightcom26