例如:在C++頭文件中,如果我定義了一個struct Record
,我想用它進行排序,以便我想重載less operator
。以下是我在各種代碼中注意到的三種方法。我大致注意到:如果我打算將Record
放入一個std::set
,map
, priority_queue
,...容器,版本2的作品(也可能是版本3);如果我要將Record
存入vector<Record> v
,然後撥打make_heap(v.begin(), v.end())
等。那麼只有版本1可以工作。C++少運算符重載,使用哪種方式?
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;
}
};
在例如同一頭文件
:
//version 3
inline bool operator <(const Record& lhs, const Record& rhs)
{
return lhs->num>rhs->num;
}
基本上,我想在這裏拋出的問題,看看是否有人能想出一些總結什麼是這三種方法之間的差異以及每個版本有什麼合適的地方?
提高你的接受評級。 –
可以請你發佈不適用的每個案例的完整示例程序 –
我看不到版本3 –