【问题标题】:How to write a custom predicate for multi_index_containder with composite_key?如何使用 Composite_key 为 multi_index_container 编写自定义谓词?
【发布时间】:2010-06-10 11:28:37
【问题描述】:

我用谷歌搜索了 boost 的人,但没有找到任何示例。可能这是一个愚蠢的问题......无论如何。

所以我们得到了那个男人的著名电话簿:

typedef multi_index_container<
  phonebook_entry,
  indexed_by<
    ordered_non_unique<
      composite_key<
        phonebook_entry,
        member<phonebook_entry,std::string,&phonebook_entry::family_name>,
        member<phonebook_entry,std::string,&phonebook_entry::given_name>
      >,
      composite_key_compare<
        std::less<std::string>,   // family names sorted as by default
        std::greater<std::string> // given names reversed
      >
    >,
    ordered_unique<
      member<phonebook_entry,std::string,&phonebook_entry::phone_number>
    >
  >
> phonebook;


phonebook pb;
...
// look for all Whites
std::pair<phonebook::iterator,phonebook::iterator> p=
  pb.equal_range(boost::make_tuple("White"), my_custom_comp());

my_custom_comp() 应该是什么样子?我的意思是这对我来说很清楚,然后它将 boost::multi_index::composite_key_result&lt;CompositeKey&gt; 作为参数(由于编译错误:)),但是在这种特殊情况下 CompositeKey 是什么?

struct my_custom_comp
{
    bool operator()( ?? boost::multi_index::composite_key_result<CompositeKey> ?? ) const
    {
        return blah_blah_blah;
    }
};

提前致谢。

【问题讨论】:

    标签: c++ boost predicate composite-key multi-index


    【解决方案1】:

    它应该看起来像composite_key_compare。对于您的情况(非模板版本):

    typedef composite_key<
        phonebook_entry,
        member<phonebook_entry,std::string,&phonebook_entry::family_name>,
        member<phonebook_entry,std::string,&phonebook_entry::given_name>
      > my_comp_type_t;
    
    struct my_custom_comp
    {
        bool operator()( 
            const boost::tuple<const char*>& x,
            const boost::multi_index::composite_key_result<my_comp_type_t>& y ) const
        {
            return false; // should return something instead of false
        }
        bool operator()( 
            const boost::multi_index::composite_key_result<my_comp_type_t>& y,
            const boost::tuple<const char*>& x ) const
        {
            return false; // should return something instead of false
        }
    };
    

    【讨论】:

    • 能否请您指出上面示例中的 CompositeKey 类型(这里使用的 -composite_key_result)是什么?我很感激这个答案。
    • CompositeKey 是一个模板参数。检查我的答案中的链接。
    • 上面发生了什么?你能发布一个完整的例子吗?我不够聪明,我害怕理解你提供的链接。
    • @shaz,完整的例子太大了,试着从Boost MultiIndex documentation开始,这样你就可以问更具体的问题了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 2013-07-24
    • 2016-09-26
    • 1970-01-01
    相关资源
    最近更新 更多