当前位置:  开发笔记 > 编程语言 > 正文

在C++中对结构的向量进行排序

如何解决《在C++中对结构的向量进行排序》经验,为你挑选了1个好方法。

我有个问题.声明说,比赛的结果是从标准输入中读取的,我必须按照已解决问题的数量按顺序在屏幕上打印最终排名.这是我的代码.

#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++版本使用名称空间声明的结构.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有