Я написал ответ here, чтобы использовать qsort
для сортировки массива массивов. Я не мог использовать sort
из-за использования оператора присваивания в операциях swap
.Использование суб-векторов с qsort
Я считаю, что условие на мой ответ работы является:
тип элементов массива должен быть TrivialType, в противном случае поведение не определено
Так что мой вопрос: int[2]
a "TrivialType"?
Фактический код в ответ, что запрос на этот вопрос:
int array[5][2] = { {20, 11}, {10, 20}, {39, 14}, {29, 15}, {22, 23} };
static const auto SIZE = size(*array);
qsort(array, size(array), sizeof(*array), [](const auto lhs, const auto rhs) {
const auto first = reinterpret_cast<const int*>(lhs);
const auto last = next(first, SIZE);
const auto its = mismatch(first, last, reinterpret_cast<const int*>(rhs));
if (its.first == last) {
return 0;
} else if (*its.first < *its.second) {
return -1;
} else {
return 1;
}});
Вам необходимо перейти по ссылкам: http://en.cppreference.com/w/cpp/types/is_trivial: *, то есть скаляр типа, тривиальный копируемый класс с тривиальным конструктором по умолчанию или массив такого типа/класса, возможно, cv-qualified * – NathanOliver
IIRC вам следует предпочесть 'std :: sort()' over 'qusort()'. –
@ πάνταῥεῖ Вы правильно прочитали вопрос? Я прямо объяснил, почему это не сработает. –