igo*_*gor 2 c++ sorting vector
我有
class c1{
public:
int number;
c1()
{
number=rand()%10;
}
bool operator < (c1 *w)
{
return number < w->number;
}
};
vector<c1*> vec = { ... }
sort(vec.begin(),vec.end())
Run Code Online (Sandbox Code Playgroud)
为什么它有点排序?
但如果我们有
bool operator < (c1 w)
{
return number < w.number;
}
Run Code Online (Sandbox Code Playgroud)
和
vector<c1> vec = { ... }
Run Code Online (Sandbox Code Playgroud)
它会被排序!
最直接的方法是定义一个函数
bool c1_ptr_less( c1 const *lhs, c1 const *rhs ) {
return lhs->something < rhs->something;
}
std::sort( vec.begin(), vec.end(), & c1_ptr_less );
Run Code Online (Sandbox Code Playgroud)
我建议使用通用仿函数来处理所有指针数组
struct pointer_less {
template< typename T >
bool operator()( T const *lhs, T const *rhs ) const
{ return * lhs < * rhs; }
};
std::sort( vec.begin(), vec.end(), pointer_less() );
Run Code Online (Sandbox Code Playgroud)
有了这个,定义通常c1::operator< ( const c1 & )和其他类别.
通常,最佳实践是完全避免指针,包括指针数组.