获取' std::upper_bound '的自定义比较器函数中当前元素的索引



我试图使用std::upper_bound来查找std::vector<double> xpositions内元素的上界。xpositions中每个元素的索引需要用于索引多维数组。我试着

upper_bound(xpositions.cbegin(), xpositions.cend(), value,
[](const double& element, const double& value){
// get index of current element
const auto index = std::distance(xpositions.cbegin(), &element);
// look up multidimensional array
bigarray[index];
}));

,但这不能编译,因为&element不能转换为迭代器。有没有一种方法可以获得element的索引,而不需要执行可能昂贵的std::find?

vector中的元素存储在连续的区域,简单的指针运算就可以完成:

const auto index = &element - &xpositions[0];

您还需要在lambda中通过引用捕获xpositions

如果你想使用distance,你必须将vector的非const迭代器传递给upper_bound,并且谓词应该接受double的非const引用:

upper_bound(xpositions.begin(), xpositions.end(), value,
[&](const double& value, double& element){
// get index of current element
auto index = std::distance(&xpositions[0],&element);

相关内容

  • 没有找到相关文章

最新更新