gpt4 book ai didi

C++ 如何使用运算符 < 对 vector 进行排序

转载 作者:太空狗 更新时间:2023-10-29 23:34:10 25 4
gpt4 key购买 nike

我有

 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())

为什么不排序?

但如果我们有

 bool operator < (c1 w)
{
return number < w.number;
}

vector<c1> vec = { ... }

它会被排序!

最佳答案

最直接的方法是定义一个函数

bool c1_ptr_less( c1 const *lhs, c1 const *rhs ) {
return lhs->something < rhs->something;
}

std::sort( vec.begin(), vec.end(), & c1_ptr_less );

我建议的是一个通用仿函数来处理所有指针数组

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() );

有了这个,定义通常的 c1::operator< ( const c1 & )其他类也是如此。

通常,最佳做法是完全避免使用指针,包括指针数组。

关于C++ 如何使用运算符 < 对 vector<class *> 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5635909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com