如何返回向量中元素的索引

how to return index of element in vector

本文关键字:元素 索引 向量 何返回 返回      更新时间:2023-10-16

给定向量

vector<classX *> myVec;

如何返回其元素之一的索引CCD_ 1,如下函数所示;

size_t nearestElement(classY const& p){
     size_t i(0);
     double d = distance(myVec[i]->position(), p);
     for (auto const& element : myVec){
         if(distance(element->position(), p) < d){
            i = ???; // the index of the current element
         }
     return i;
     }
}

其中position()是在classX中定义的函数,distance不是std::distance函数,而是我定义自己的函数。

将基于的范围更改为常规的,或将索引变量添加到当前的for:

int index = 0;
for (auto const& element : myVec){          
     if(distance(element->position(), p) < d){
        i = index; // the index of the current element
     }
     index++
...

&element - &myVec[0]应该为具有连续数据的容器(如std::vector)做到这一点。

如果你的distance函数很便宜,你可以这样重写你的函数:

size_t nearestElement(classY const& p)
{
    auto it = std::min_element(myVec.begin(), myVec.end(),
        [&p](const classX* lhs, const classX* rhs) {
            return distance(lhs->position(), p) < distance(rhs->position(), p);
        });
    return it - myVec.begin(); // Will return 0 if myVec is empty.
}