use*_*451 18 c++ stl operator-overloading
例如:在C++头文件中,如果我定义了一个struct Record,我想用它进行可能的排序,以便我想重载less operator.以下是我在各种代码中注意到的三种方式.我粗略地发现:如果我要放Record成std::set,map,priority_queue,...容器,第2版的作品(大概3版为好); 如果我要保存Record到a vector<Record> v然后调用make_heap(v.begin(), v.end())等..那么只有版本1工作.
struct Record
{
char c;
int num;
//version 1
bool operator <(const Record& rhs)
{
return this->num>rhs.num;
}
//version 2
friend bool operator <(const Record& lhs, const Record& rhs) //friend claim has to be here
{
return lhs->num>rhs->num;
}
};
Run Code Online (Sandbox Code Playgroud)
在相同的头文件中,例如:
//version 3
inline bool operator <(const Record& lhs, const Record& rhs)
{
return lhs->num>rhs->num;
}
Run Code Online (Sandbox Code Playgroud)
基本上,我想在这里提出问题,看看是否有人能够总结出这三种方法之间的差异以及每个版本的正确位置是什么?
小智 5
定义less运算符的最佳方法是:
struct Record{
(...)
const bool operator < ( const Record &r ) const{
return ( num < r.num );
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30424 次 |
| 最近记录: |