我在使用std :: qsort對象的向量時遇到了麻煩。 (請注意,此代碼是一個循環內)C++ quicksort對象向量
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
。 lambda有什麼問題嗎?或者還有另外一個要求像使用賦值運算符重載一樣使用qsort。但s_GridData
只是一個整數值的結構。
在此先感謝。
你有什麼理由不使用'std :: sort'嗎?而且,'qsort'的第一個參數應該是一個包含數據的緩衝區。矢量的地址不會。 – juanchopanza 2015-03-03 12:48:54