是的,C++的stack
類允許你自定義比較函數。默認情況下,stack
使用operator<
進行元素比較,但你可以在創建stack
時提供自定義的比較函數。
例如,假設你有一個自定義的數據結構MyClass
,你想使用一個非標準的比較函數對其進行排序。你可以這樣做:
#include <iostream>
#include <stack>
#include <functional>
class MyClass {
public:
int value;
MyClass(int v) : value(v) {}
};
// 自定義比較函數
bool compareMyClass(const MyClass& a, const MyClass& b) {
return a.value > b.value; // 降序排序
}
int main() {
// 使用自定義比較函數創建stack
std::stack<MyClass, std::vector<MyClass>, decltype(compareMyClass)> myStack(compareMyClass);
myStack.push(MyClass(5));
myStack.push(MyClass(3));
myStack.push(MyClass(10));
while (!myStack.empty()) {
MyClass top = myStack.top();
myStack.pop();
std::cout << "Top value: " << top.value << std::endl;
}
return 0;
}
在這個例子中,我們定義了一個名為compareMyClass
的比較函數,用于按降序對MyClass
對象進行排序。然后,我們使用std::stack
的第三個模板參數(比較函數)來指定我們的自定義比較函數。