C++ 反向映射函数关系(c+;+;)

C++ 反向映射函数关系(c+;+;),c++,function,mapping,C++,Function,Mapping,我使用一个简单的函数(y(x)),我想从某个y值生成一个x值。虽然通常反向映射不会给出单个x值,但我使用的是y值的最大值。这意味着y值I输入将有一个唯一的x值(最大值)。我不知道如何用c++编写这个代码如果你不需要插值,只需要精确的反向查找,那么它就相对简单: std::map<YType, XType> lookup; // (code to read the file goes here) // for each x { YType y = f(x); if ((

我使用一个简单的函数(y(x)),我想从某个y值生成一个x值。虽然通常反向映射不会给出单个x值,但我使用的是y值的最大值。这意味着y值I输入将有一个唯一的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;
    }
// }

如果您不需要插值,只需要精确的反向查找,那么它就相对严格:

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;
    }
// }

如果我理解正确,你会得到一个有限范围的值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)
size\u t k=0;
tm=f(x[k]);
T-tmp;
对于(尺寸i=1;i m)
{
k=i;
m=tmp;
}
}
//最大值为(x[k],m)

这里
T
f
tf(T)的类型

如果我理解正确,你会得到一个有限范围的值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)
size\u t k=0;
tm=f(x[k]);
T-tmp;
对于(尺寸i=1;i m)
{
k=i;
m=tmp;
}
}
//最大值为(x[k],m)

这里
T
f
tf(T)的类型

你知道如何迭代所有的x吗?你说的是什么样的函数?它有一个封闭的形式吗?C++是一种编程语言,而不是数学工具。如果你的函数y是解析式给出的,那么试试像Maple或Mathematica这样的符号解算器(或者自己做数学运算)。如果y是数值形式,你就得写一个数值解算器。对不起,我在编程方面没有什么背景。我不能简单地使用Maple,因为我必须在100000个波形上迭代这个过程(而且它不是分析性的)。“函数”实际上是一组数据,所以我不确定它是否有一个封闭形式的逆。另外,我也不知道如何迭代x,因为它不是量子化的(尽管我可能只会尝试用0.1纳秒左右的步长来迭代)。@Brian:所以你的问题实际上是这样的“我有一个将X映射到Y的2位关系。我如何在C++中表示这些数据,这样我就可以查询逆关系:给定一个特定的y,找到所有的x的映射。特别是,我只对最大X类感兴趣。是吗?你知道如何迭代所有x吗?你讨论什么函数?它有一个封闭的形式吗?C++是一种编程语言,而不是数学工具。如果你的函数Y被解析,试试像Maple或Mathematica这样的符号求解器。(或者自己做数学计算)。如果y是数值形式,你就必须编写一个数值解算器。对不起,我没有什么编程背景。我不能简单地使用Maple,因为我必须在100000个波形上迭代这个过程(它不是解析的)。函数“实际上是一组数据,所以我不确定它是否有一个闭合形式的逆。而且我也不确定如何在x上迭代,因为它不是量子化的(尽管我可能只会尝试用0.1纳秒左右的步长来迭代)。@Brian:那么你的问题真的是这样的吗“我有一个2位关系,把X映射到Y。我如何在C++中表示这些数据,这样我就可以查询逆关系:给定一个特定的y,找到所有x的映射。特别是,我只对最大x类感兴趣。”是吗?