我有一个sort_map类
class sort_map {
char key;
int val;
sort_map(int v, char k): key(k), val(v){}
};
using namespace std;
int comp_int(const void *a, const void *b) {
return (*(sort_map*)b).val - (*(sort_map*)a).val);
}
int main () {
vector <sort_map> v;
v.push_back(5, 'a');
v.push_back(67, 'd');
v.push_back(2, 'c');
v.push_back(98, 'f');
return 1;
}我想通过val使用qsort,命令向量,但它不起作用。
qsort(&v.begin(), v.size(), sizeof(sort_map), comp_int);但是当我用这个的时候,它就起作用了
qsort(&v[0], v.size(), sizeof(sort_map), comp_int);谁能告诉我原因吗?
发布于 2016-06-08 20:22:27
尝试这样做:
sort_map* ptr1 = &v[0];
sort_map* ptr2 = &v.begin();你会发现哪一个会被编译,并且会发现这些表达式不相等。
第一个语句将编译,因为v[0]的类型是sort_map,因此应用于它的&a将使它成为
sort_map*
第二个语句的基本类型是vector<sort_map>::iterator,它的地址应该是
iterator*
对于此vector类型。如您所见,不能将iterator*分配给sort_map* --它们并不相似。
qsort采用void*,而不强制编译器中的任何类型安全。void*可以传递任何类型的指针,而不需要任何类型的广播,因此它编译得很好。您将错误的东西传递给了qsort。正如其他人所建议的,您最好使用std::sort
https://stackoverflow.com/questions/37711636
复制相似问题