温馨提示×

c++ stack类能否自定义比较函数

c++
小樊
81
2024-09-25 08:43:12
栏目: 编程语言

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

0