在用户定义的struct的向量中查找min和max元素的索引

时间:2016-04-07 12:54:08

标签: c++

请考虑以下代码:

struct ColorSpacePoint
{
    int X;
    int Y;
}

std::vector<ColorSpacePoint> v{...}; // Initialized with data

auto minMaxY = std::minmax_element(std::begin(v), std::end(v),
    [](ColorSpacePoint const& lhs, ColorSpacePoint const& rhs)
{
    return lhs.Y < rhs.Y;
});

std::pair<ColorSpacePoint, ColorSpacePoint> result = 
    std::make_pair(ColorSpacePoint{minMaxY.first->X, minMaxY.first->Y}, 
                   ColorSpacePoint{minMaxY.second->X, minMaxY.second->Y});

使用此代码,结果包含最小和最大元素。如何更改代码以检索std :: pair索引:

std::pair<int, int> resultIndices = ... ;

1 个答案:

答案 0 :(得分:3)

你已经拥有了迭代器,这就是你所需要的:

const auto resultIndices = std::make_pair(
   std::distance(std::begin(v), minMaxY.first),
   std::distance(std::begin(v), minMaxY.second)
);

由于矢量存储是连续的,这实际上只是指针减法,因此非常快。