Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用于沿数字键轴插值T的容器_C++_C++17_Game Development - Fatal编程技术网

C++ 用于沿数字键轴插值T的容器

C++ 用于沿数字键轴插值T的容器,c++,c++17,game-development,C++,C++17,Game Development,是否存在这样一个容器:当使用10处的键1和20处的键2进行初始化时,当在15处访问时,将使用返回值为T的(键1、键2、0.5)调用插值回调函数 回调确保我们可以使用首选的S曲线进行插值。我希望每一端的访问都以1.0作为因子传递相同的密钥 伪代码: Container<float, MyStruct> container; container.insert(10, MyStruct{ .x = 1.0f }); container.insert(20, MyStruct{ .x

是否存在这样一个容器:当使用10处的键1和20处的键2进行初始化时,当在15处访问时,将使用返回值为T的(键1、键2、0.5)调用插值回调函数

回调确保我们可以使用首选的S曲线进行插值。我希望每一端的访问都以1.0作为因子传递相同的密钥

伪代码:

Container<float, MyStruct> container;
container.insert(10, MyStruct{  .x = 1.0f  });
container.insert(20, MyStruct{  .x = 2.0f  });

auto middlepoint = container.get(15,
    [] (const MyStruct& a, const MyStruct& b, float factor) {
        return MyStruct{ a.x * factor + b.x * (1.0 - factor) };
    });
assert(middlepoint.x ~ 1.5f);
集装箱;
insert(10,MyStruct{.x=1.0f});
insert(20,MyStruct{.x=2.0f});
自动中点=容器。获取(15,
[](常量结构与a、常量结构与b、浮动系数){
返回MyStruct{a.x*因子+b.x*(1.0-因子)};
});
断言(中点x~1.5f);
你看到这个了吗?这个数据结构叫什么


谢谢

C++库中没有这样的容器,它可以完成所有的任务。您需要从一个已排序的容器开始,例如
std::map
,甚至是一个已排序的
std::vector
,然后使用
std::lower_bound
和/或
std::upper_bound
来实现此功能的其余部分。看起来像是
std::map
+查找正确的间隔+调用插值函数库的任务是非主题的。不管怎么说,也许是个轮子,但不太复杂。我希望几行代码就足够了,因为您似乎知道如何直接实现它。请注意,这不是一个关于数据结构的问题,因此,不应该有基本的容器来做这样的事情。这看起来像是一个使用DS的操作,而不是它本身应该包含的东西。我实际上是在问这个数据结构是否有名称,但我想没有。我将尝试寻找“轮子”,看看我得到了什么。当然,我以前也用简单的数组实现过这个,但是如果有一些经过深思熟虑的API,那就太好了。