首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++排序类向量

c++排序类向量
EN

Stack Overflow用户
提问于 2016-06-08 19:48:51
回答 1查看 116关注 0票数 1

我有一个sort_map

代码语言:javascript
复制
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,命令向量,但它不起作用。

代码语言:javascript
复制
qsort(&v.begin(), v.size(), sizeof(sort_map), comp_int);

但是当我用这个的时候,它就起作用了

代码语言:javascript
复制
qsort(&v[0], v.size(), sizeof(sort_map), comp_int);

谁能告诉我原因吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-08 20:22:27

尝试这样做:

代码语言:javascript
复制
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

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37711636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档