我试图使用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);