boost::ptree 和 KeyCompare 函数?

Posted

技术标签:

【中文标题】boost::ptree 和 KeyCompare 函数?【英文标题】:boost::ptree and the KeyCompare function? 【发布时间】:2013-04-25 23:27:43 【问题描述】:

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

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

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

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

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

谢谢, 里克。

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于boost::ptree 和 KeyCompare 函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何手动创建具有 XML 属性的 boost ptree?

boost ptree 即时修改一组值

如何使 boost ptree 以相同的方式解析 xml 和 json?

如何使用 boost ptree 删除 xml 属性?

使用 Boost ptree 解析 std::string

如何使用 Boost ptree C++ 解析其值中包含 HTML 标记的 XML