1

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

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

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

据我所知,默认的 KeyCompare 是 std::less(),我想更改它。我认为只是比较两个字符串的哈希值。

不言而喻(但我还是会这么说)我将使用不同的对象作为密钥来促进这一点:具有 (std::string+hash) 的东西,而不仅仅是 std::string。哈希将在构建期间计算。

谢谢,里克。

4

1 回答 1

2

从 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;
于 2013-10-21T15:25:16.830 回答