我在使用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