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

时间:2014-04-22 14:29:34

标签: c++ pointers vector indexing

给出一个向量

vector<classX *> myVec;

如何返回其中一个元素的索引i,如下面的函数所示;

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函数,而是我定义自己的函数。

2 个答案:

答案 0 :(得分:2)

根据常规更改范围,或将索引变量添加到当前的:

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

答案 1 :(得分:1)

&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.
}