我计划将我自己的比较功能与boost bimap一起使用。我要解决的问题是当我将boost bimap与指针一起使用时,比较不应该比较两个指针,而应该比较指针所指向的类。

我尝试了以下代码。但是它甚至没有编译。我究竟做错了什么?还有一种更简单的方法来实现较少的功能,该功能比较两个对象而不是两个指针(指针)

typedef std::set<int> ruleset;

template <class myclass>
bool comp_pointer(const myclass &lhs, const myclass &rhs)
{
    return ((*lhs) < (*rhs));
}

typedef boost::bimap<set_of<ruleset *, comp_pointer<ruleset *> >, int> megarulebimap;


错误讯息:

party1.cpp:104:64:错误:“模板结构增强:: bimaps :: set_of”的模板参数列表中参数2的类型/值不匹配
party1.cpp:104:64:错误:预期为类型,获取了“ comp_pointer”
party1.cpp:104:70:错误:模板参数1无效
party1.cpp:104:85:错误:“;”之前的声明中的类型无效代币

最佳答案

typedef std::set<int> ruleset;

struct ruleset_cmp {
    bool operator()(const ruleset *lhs, const ruleset *rhs) const
    {
        return ((*lhs) < (*rhs));
    }
};

typedef boost::bimap<set_of<ruleset *, ruleset_cmp>, int> megarulebimap;


好的。以上代码段有效。似乎需要在这里使用函子。

08-16 20:01