Я пытался использовать алгоритмы STL
для работы с элементами многомерных массивов, и, похоже, к ним ничего не привязано. Как мне это сделать:
// Declaration of pix:
float pix[1000][2];
// (...)
const int sizeToParse = 300;
static auto colLessThan = []
(const float coordPair_lhs[2], const float coordPair_rhs[2]) -> bool
// (const float** coordPair_lhs, const float** coordPair_rhs) -> bool
// (const float* coordPair_lhs[], const float* coordPair_rhs[]) -> bool
{
return coordPair_lhs[1] < coordPair_rhs[1];
};
float** lhsColMinIt;
float** lhsColMaxIt;
// float* lhsColMinIt[2];
// float* lhsColMaxIt[2];
std::tie(lhsColMinIt, lhsColMaxIt) = std::minmax_element(pix, pix + sizeToParse, colLessThan);
Все мои попытки отклоняются с ошибкой компилятора.
После принятого ответа он сократился до этого:
В экземпляре 'std::tuple‹_T1, _T2>& std::tuple‹_T1, _T2>::operator=(std::pair‹_U1, _U2>&&) [с _U1 = const float () [2]; _U2 = константа с плавающей запятой ()[2]; _T1 = число с плавающей запятой (&)[2]; _T2 = float (&)[2]]':src/ClusterPairFunctions.cc:32:109: требуется отсюда /data/hunyadi/usr/include/c++/7.1.0/tuple:1252:25: ошибка: неверное преобразование из 'const float () [2]' в 'float ()[2]' [-fpermissive]
Обновление: Используя метод, предоставленный принятым ответом, код работает, мне просто не удалось понять, что компилятор сообщает о некорректности константы внутри std::tuple
.
float
(т. е.float*
), но элементы массиваpix
— это массивы двухfloat
, т. е. типfloat[2]
. Решение показано в ответе Jarod42. - person Some programmer dude   schedule 29.06.2017