user494461
user494461

Reputation:

How to get the int/size_t value from the iterator position of the minimum element in stl vector?

    std::vector<bool> reprVectors::encode(std::vector<float> input){
    std::vector<float> distance;
    for(size_t i=0;i<this->reprVectorsList.size();i++){
            distance.push_back(distBtw(input,this->reprVectorsList[i]));
    }
    std::vector<float>::iterator it= min_element(distance.begin(),distance.end());

    return this->reprVectorsList[it]->code;
}


float reprVectors::distBtw(std::vector<float> input, Node* node){
    double distance=0;
    for(size_t i=0;i<node->valuesInDim.size();i++){
        distance = distance +
                    pow((node->valuesInDim[i]-input[i]),2);
    }
    return (float)pow(distance,0.5);
}

it iterator gives me the minimum distance in the distance vector. How do I find the corresponding position in my reprVectorList? how can I get an int/size_t value from it iterator returned by min_element?

Upvotes: 1

Views: 6376

Answers (2)

juanchopanza
juanchopanza

Reputation: 227390

You can use std::distance:

auto index = std::distance(distance.begin(), it);

This approach is favourable to performing arithmetic operations on iterators, since it is valid for all operator types.

Upvotes: 8

MikMik
MikMik

Reputation: 3466

You can get the "index" from an iterator like this:

size_t index = it - distance.begin();

Upvotes: 2

Related Questions