有这样一个管理员类
class Admin
{
public:
Admin() {}
Admin(string log, string pass): login(log), password(pass) {}
~Admin() {}
string get_login() { return login; }
string get_password() { return password; }
static int a_Login(string Login, string Password);
static void a_Menu();
static void a_print();
static void a_delete();
static void a_add();
static void a_edit();
static void a_sort(int ascend=1);
static void load_data();
static void read_admins();
static void write_admins();
static string current_admin;
protected:
static int ascend_comp_login(const void* a, const void* b);
static int descend_comp_login(const void* a, const void* b);
string login, password;
};
还有这样的比较器和方法本身,它调用 qsort
int Admin::ascend_comp_login(const void* a,const void* b)
{
string l = ((Admin*)a)->get_login();
string r = ((Admin*)b)->get_login();
return l.compare(r);
}
int Admin::descend_comp_login(const void* a, const void* b)
{
string l = ((Admin*)a)->get_login();
string r = ((Admin*)b)->get_login();
return r.compare(l);
}
void Admin::a_sort(int ascend)
{
if (ascend) qsort(&admins, admins.size(), sizeof(Admin), ascend_comp_login);
else qsort(&admins, admins.size(), sizeof(Admin), descend_comp_login);
Admin::a_print();
}
admins 是类型的向量vector<Admin>
经过这样的转换,首先登录,然后回到管理员,显然,infa丢失了。getter 返回随机垃圾或空字符串
我该如何解决这个问题,以便最终可以使用它qsort?
您将指针传递给向量本身,而不是向量的数据。使用向量::数据
还可以考虑使用
<algorithm>迭代器上的排序算法,std::sort