反向映射功能关系c ++

问题描述

| 我正在使用一个简单的函数(y(x)),我想从某个y值生成一个x值。虽然通常反向映射不会给出单个x值,但我使用的是y值中的最大值。这意味着我输入的y值(最大值)将有一个唯一的x值。我不明白如何用C ++编写代码     

解决方法

        如果您不需要插值,只需进行精确的反向查找,则它相对简单:
std::map<YType,XType> lookup;
// (code to read the file goes here)
// for each x {
    YType y = f(x);
    if ((lookup.count(y) == 0) || (lookup[y] < x)) {
        lookup[y] = x;
    }
// }
然后,您的反向查找仅为
lookup[y]
,如果数据中实际上缺少
y
,则将返回0(或在适用时为默认构造值)。 请注意,我的代码效率不高,它在地图中的查找次数是2次,最多3次。您可以使用迭代器进行优化,但是我担心的是,如果您不这样做,则会掩盖正在发生的事情已经熟悉它们:
typedef std::map<YType,XType> maptype;
typedef std::pair<maptype::iterator,bool> resulttype;

resulttype result = lookup.insert(std::make_pair(y,x));
if (!result.second) {
    // key already existed,so value was not inserted. Check for max.
    maptype::iterator pos = result.first;
    if ((*pos).second < x) {
        (*pos).second = x;
    }
}
    ,        如果我理解正确,您将得到有限范围的x值,例如
x[0]
x[1]
,...,
x[N]
和函数
f
,并且希望找到索引
k
,其中
f(x[k])
可能是最大的。在这种情况下,将执行一个简单的搜索:
size_t k = 0;
T m = f(x[k]);
T tmp;

for (size_t i = 1; i <= N; ++i)
{
  if ((tmp = f(x[i])) > m)
  {
    k = i;
    m = tmp;
  }
}

// Maximum is (x[k],m)
T
是这样的类型,such8ѭ是
T f(T);