我正在嘗試撰寫可以在我們呼叫 std::less 時使用的成員函式。我定義了一個“pqueue”類,它在內部將內容存盤在出隊中并使用 std::less 進行比較。定義了另一個類“myClass”,我使用 pqueue 來存盤該類的物件。代碼如下。
#include <iostream>
#include <deque>
#include <algorithm>
#include <functional>
using namespace std;
template <class T> class PQueue
{
public:
PQueue();
~PQueue();
void push(T & item);
void push(T && item);
T & front();
using Queue = std::deque<T>;
protected:
Queue q_;
};
template <class T> PQueue<T>::PriorityQueue()
{
}
template <class T> PQueue<T>::~PriorityQueue()
{
}
template <class T> void PQueue<T>::push(T & item)
{
q_.emplace_back(item);
}
template <class T> void PQueue<T>::push(T && item)
{
q_.emplace_back(item);
}
template <class T> T & PQueue<T>::front()
{
std::partial_sort(q_.begin(), q_.begin() 1, q_.end(), std::less<T>{});
return q_.front();
}
class myClass
{
public:
myClass(int x)
{
y = x;
}
int y;
friend bool operator < (const myClass &obj1, const myClass &obj2);
/*bool operator < (const myClass &obj)
{
return y < obj.y;
}*/
};
bool operator < (const myClass &obj1, const myClass &obj2)
{
return obj1.y < obj2.y;
}
int main()
{
myClass obj1(10);
myClass obj2(2);
myClass obj3(100);
PQueue<myClass> queue;
queue.push(obj1);
queue.push(obj2);
queue.push(obj3);
cout << queue.front().y;
return 0;
}
如果我將“operator <”函式定義為 myClass 的友元函式,則上面的代碼作業正常。但是,如果我將 'operator <' 函式定義為 myClass 的成員函式,如下所示,它會拋出錯誤。
bool operator < (const myClass &obj)
{
return y < obj.y;
}
錯誤:
/usr/include/c /9/bits/stl_function.h:386:20: error: no match for ‘operator<’ (operand types are ‘const myClass’ and ‘const myClass’)
386 | { return __x < __y; }
| ~~~~^~~~~
main.cpp:79:14: note: candidate: ‘bool myClass::operator<(const myClass&)’
79 | bool operator < (const myClass &obj)
| ^~~~~~~~
main.cpp:79:14: note: passing ‘const myClass*’ as ‘this’ argument discards qualifiers
根據錯誤,很明顯 operator< function 應該將 const 物件作為引數,如果我們將此函式定義為類的成員函式,這是不可能的。但是根據堆疊溢位的答案之一,我們可以將其定義為成員函式。
如何為 std::map 使用多載的 std::less
任何人都可以讓我知道我們是否可以將 operator< 函式定義為用于 std::less 的成員函式,如果是,請讓我知道代碼中的任何錯誤。
uj5u.com熱心網友回復:
這個答案來自發布的評論“Jarod42”。
缺少 const(最后)-> bool operator < (const myClass &obj) const 否則就像朋友函式將是朋友 bool operator < (myClass&, const myClass&) 一樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/376901.html
上一篇:將讀取的位元組數轉換為讀取的秒數
