成员函数作为地图比较器?

时间:2013-11-10 03:06:31

标签: c++ comparator stdmap member-function-pointers

我知道如何创建一个充当自定义地图比较器的函数:

std::map<std::string, std::string, bool (*)(std::string, std::string)> myMap(MapComparator);

bool MapComparator(std::string left, std::string right)
{
    return left < right;
}

但我不知道如何使用成员功能:

bool MyClass::MapComparator(std::string left, std::string right)
{
    return left < right;
}

1 个答案:

答案 0 :(得分:2)

您有几种选择:

在C ++ 11中,您可以使用lambda:

std::map<std::string, std::string, bool (*)(std::string, std::string)> myMap(
    [](string lhs, int rhs){ // You may need to put [this] instead of [] to capture the enclosing "this" pointer.
       return MapComparator(lhs, rhs); // Or do the comparison inline
    });

如果该函数是静态的,请使用::语法:

class MyClass {
public:
    static bool MyClass::MapComparator(std::string left, std::string right);
};
...
std::map<std::string, std::string, bool (*)(std::string, std::string)> myMap(MyClass::MapComparator);

如果函数是非静态函数,请创建一个静态包装器,成员或非成员,并从中调用成员函数。