У меня возникают проблемы с использованием std :: qsort на моем векторе объектов. (Обратите внимание, что этот код внутри цикла)C++ quicksort vector of objects
std::vector<s_GridData> info = GetAllAdjacentObjInfoFromMap(FLOOR_OBJ, e_Object::eObject_WIRE, itr.getPos());
//No wires adjacent!
if (info.size() == 0) {
continue;
}
std::cout << "Before sorting: ";
std::cout << info;
std::qsort(&info, info.size(), sizeof(s_GridData),
[](const void *lhs, const void *rhs)->int {
s_GridData gridLhs = *reinterpret_cast<const s_GridData*>(lhs);
s_GridData gridRhs = *reinterpret_cast<const s_GridData*>(rhs);
if (gridLhs.groupID < gridRhs.groupID) return -1;
if (gridRhs.groupID < gridLhs.groupID) return 1;
return 0;
}
);
std::cout << "After sorting: ";
std::cout << info;
Вот конкретно в коде быстрой сортировки, кажется, что быстрая сортировка стирает мой info
. Что-то не так с лямбдой? Или есть другое требование для использования qsort как перегрузка оператора присваивания. Однако s_GridData
представляет собой просто структуру интегральных значений.
Заранее спасибо.
У вас есть причины не использовать 'std :: sort'? Кроме того, первым параметром 'qsort' должен быть буфер с данными. Адрес вектора не будет. – juanchopanza