是的,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
的第三个模板参数(比较函数)来指定我们的自定义比较函数。