我有个问题.声明说,比赛的结果是从标准输入中读取的,我必须按照已解决问题的数量按顺序在屏幕上打印最终排名.这是我的代码.
#include#include #include using namespace std; struct results { unsigned int id; //id of the team unsigned int m; //number of solved problems }; int comparare(const void * i, const void * j) //compare function for qsort() { return -( *(unsigned int*)i - *(unsigned int*)j ); } int main() { unsigned int n; vector standings; //initializing an array of structs scanf("%u", &n); //the size of the vector for(unsigned int i=0; i 当我想编译代码时,编译器会发现错误
无法将'std :: vector'转换为'void*'以将参数'1'转换为'void qsort(void*,size_t,size_t,__ compar_fn_t)'
在线
qsort(standings, n, sizeof(results), comparare);
我需要做些什么来修复它?
1> Nicol Bolas..:如果你绝对必须使用
qsort
一个vector
(和你不应该),那么你必须通过这样的:qsort(standings.data(), standings.size(), sizeof(results), comparare);
vector::data
获取指向存储在数组中的数组的指针vector
.简单地将指针传递给vector
自身也无济于事.注意,
vector::data
需要C++ 11; 使用&vector[0]
如果data
不是提供给您.但实际上,只需使用
std::sort
:std::sort(standings.begin(), standings.end(), [](const results &lhs, const results &rhs) {return lhs.id < rhs.id;});显然lambda需要C++ 11; 可以自由地为早期的C++版本使用名称空间声明的结构.