boost :: ptree和KeyCompare函数?

时间:2013-04-25 23:27:43

标签: c++ performance boost-propertytree

Boost文档没有详细说明,但有一个(可选的)KeyCompare函数可以传递给ptree。

任何人都有使用自定义KeyCompare函数的好例子吗?

我最近一直在处理一个非常慢的ptree。我的密钥是长字符串(路径),我假设字符串比较使它变慢。

从我可以收集的内容来看,默认的KeyCompare是std :: less(),我想改变它。我认为只是比较两个字符串的哈希值。

不言而喻(但无论如何我会说)我会使用一个不同的对象来实现这一点:有一些东西(std :: string + hash),而不仅仅是一个std :: string 。哈希将在构造期间计算。

谢谢, 瑞克。

1 个答案:

答案 0 :(得分:1)

从boost源代码中找到这个:一个不区分大小写的KeyCompare的示例:

   template<class T>
    struct less_nocase
    {
        typedef typename T::value_type Ch;
        std::locale m_locale;
        inline bool operator()(Ch c1, Ch c2) const
        {
            return std::toupper(c1, m_locale) < std::toupper(c2, m_locale);
        }
        inline bool operator()(const T &t1, const T &t2) const
        {
            return std::lexicographical_compare(t1.begin(), t1.end(),
                                                t2.begin(), t2.end(), *this);
        }
    };

然后您需要做的就是将其传递给basic_ptree类:

typedef basic_ptree<std::string, std::string,
                        less_nocase<std::string> >  iptree;