使用用户定义的比较器提升bimap set_of

时间:2013-06-14 23:25:01

标签: c++ boost bimap

我计划将自己的比较功能与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:错误:模板参数列表中参数2的类型/值不匹配'template struct boost :: bimaps :: set_of' party1.cpp:104:64:错误:期望一个类型,得到'comp_pointer' party1.cpp:104:70:错误:模板参数1无效 party1.cpp:104:85:错误:';'之前的声明中的无效类型令牌

1 个答案:

答案 0 :(得分:2)

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;

好。上面的代码段有效。看来这里需要使用仿函数。