按名称对向量中的元素进行排序
Sorting elements in a vector by name
class Pass{
string passName;
public:
friend bool sorted(const Pass &lhs, const Pass &rhs);
}
bool sorted(const Pass &lhs, const Pass &rhs)
{
return lhs.passName < rhs.passName;
}
class Agent{
vector <Pass *> listPass;
public:
void sortPass();
}
void Agent::sortPass()
{
vector <Pass*>listSort = listPass;
vector <Pass*>::iterator ptr;
sort (listSort.begin(), listSort.end(), sorted);
for(ptr = listSort.begin(); ptr != listSort.end(); ptr++)
{
(*ptr)->display();
}
}
我可以通过哪些方式按名称对通行证列表进行排序?我已经实现了上面的代码,但它不起作用。我收到从 'Pass*' 到 const Pass& 的无效用户定义转换错误。
因为 listSort
是指针向量,你需要对齐 sorted
函数(和友元声明)来接受指针作为参数,像这样:
bool sorted(const Pass *lhs, const Pass *rhs)
{
return lhs->passName < rhs->passName;
}
它会起作用。
好友声明应如下所示:
friend bool sorted(const Pass *lhs, const Pass *rhs);
我的偏好是重载运算符 <,这样您就可以比较 2 个传递对象(如果您不需要此运算符来做任何其他事情)。通过这样做,您对 sort 的调用将不需要最后一个参数进行比较,我觉得这样更好。
class Pass{
string passName;
public:
inline bool operator< (const Pass &lhs, const Pass &rhs)){ return( lhs.passName < rhs.passName);}
}
sort (listSort.begin(), listSort.end());
至于其他的,其他答案应该可以解决你的编译问题。
class Pass{
string passName;
public:
friend bool sorted(const Pass &lhs, const Pass &rhs);
}
bool sorted(const Pass &lhs, const Pass &rhs)
{
return lhs.passName < rhs.passName;
}
class Agent{
vector <Pass *> listPass;
public:
void sortPass();
}
void Agent::sortPass()
{
vector <Pass*>listSort = listPass;
vector <Pass*>::iterator ptr;
sort (listSort.begin(), listSort.end(), sorted);
for(ptr = listSort.begin(); ptr != listSort.end(); ptr++)
{
(*ptr)->display();
}
}
我可以通过哪些方式按名称对通行证列表进行排序?我已经实现了上面的代码,但它不起作用。我收到从 'Pass*' 到 const Pass& 的无效用户定义转换错误。
因为 listSort
是指针向量,你需要对齐 sorted
函数(和友元声明)来接受指针作为参数,像这样:
bool sorted(const Pass *lhs, const Pass *rhs)
{
return lhs->passName < rhs->passName;
}
它会起作用。
好友声明应如下所示:
friend bool sorted(const Pass *lhs, const Pass *rhs);
我的偏好是重载运算符 <,这样您就可以比较 2 个传递对象(如果您不需要此运算符来做任何其他事情)。通过这样做,您对 sort 的调用将不需要最后一个参数进行比较,我觉得这样更好。
class Pass{
string passName;
public:
inline bool operator< (const Pass &lhs, const Pass &rhs)){ return( lhs.passName < rhs.passName);}
}
sort (listSort.begin(), listSort.end());
至于其他的,其他答案应该可以解决你的编译问题。