2011-09-06 31 views
2

升壓,升壓文檔這裏基於propertytree

http://www.boost.org/doc/libs/1_41_0/doc/html/boost_propertytree/container.html

「可能有多個孩子中的一個節點相同的密鑰值。然而,這些孩子並不一定順序通過查找返回的迭代。可能指的是其中任何一種,並且對其他同名孩子的相對地位沒有保證。「

示例XML:

<library> 
    <book><title>Title_1</title></book> 
    <book><title>Title_2</title></book> 
    <book><title>Title_3</title></book> 
</library> 

樣品提升代碼:

ptree pt; 
pt.push_back(ptree::value_type("book", ptree("title"))) 

// This finds the first book and cannot iterate to the second one: 
ptree::const_iterator it = pt.find("book"); 

所以知道,你怎麼會得到所有的書籍,並確保你去他們呢?

回答

4

您必須使用equal_range功能:

std::pair < ptree::const_assoc_iterator, ptree::const_assoc_iterator> bounds = 
    pt.equal_range("book"); 

for (ptree::const_assoc_iterator it = bounds.first; it != bounds.second ; ++it) 
{ 
    // process *it 
} 
+1

......或LOWER_BOUND和UPPER_BOUND,但它更好地做到這一點在一杆,如果你真的需要範圍的兩端。好答案。 –

+0

奇怪的是,最近我被編程採訪的主題是我被要求實現'equal_range' ...去圖:) –

+0

我是否正確理解在同等範圍內可以像其他鍵的孩子一樣?爲此,我必須在循環中使用額外的關鍵比較? –