这是我在myCode.h中的代码:

#include <set>

using namespace std;

bool MyObjectComp(const MyObject& lhs, const MyObject& rhs) {
    return lhs.mTick < rhs.mTick;
}

typedef std::multiset<MyObject, MyObjectComp> MyObjectMultiSet;

但是它说函数MyObjectComp不是类型名称。我应该放在哪里?

最佳答案

std::multiset的模板参数需要一个类型,MyObjectComp不是类型,而是函数名称。您可以使用decltype来获取其类型,例如

typedef std::multiset<MyObject, decltype(MyObjectComp)*> MyObjectMultiSet;

或者您可以自己指定类型
typedef std::multiset<MyObject, bool(*)(const MyObject&, const MyObject&)> MyObjectMultiSet;

还要注意,函子/ lambda通常比使用函数更有效,因为编译器可以更轻松地优化代码。我建议使用
struct MyObjectComp {
    bool operator()(const MyObject& lhs, const MyObject& rhs) {
        return lhs.mTick < rhs.mTick;
    }
};

typedef std::multiset<MyObject, MyObjectComp> MyObjectMultiSet;

要么
auto MyObjectComp = [](const MyObject& lhs, const MyObject& rhs) {
                            return lhs.mTick < rhs.mTick;
                        };

typedef std::multiset<MyObject, decltype(MyObjectComp)> MyObjectMultiSet;

08-16 09:32