我正在使用一个简单的函数(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(或在适用时为默认构造的值)。请注意,我的代码效率不高,它在 map 中多次查询
y
,最多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;
}
}
关于c++ - 反向映射功能关系(C++),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6362043/