请考虑以下代码:
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 = ... ;
答案 0 :(得分:3)
你已经拥有了迭代器,这就是你所需要的:
const auto resultIndices = std::make_pair(
std::distance(std::begin(v), minMaxY.first),
std::distance(std::begin(v), minMaxY.second)
);
由于矢量存储是连续的,这实际上只是指针减法,因此非常快。