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 函数?的主要内容,如果未能解决你的问题,请参考以下文章