मैंने boost :: property_tree के लिए प्रलेखन के माध्यम से पढ़ा है और किसी अन्य ptree के साथ ptree को अपडेट या मर्ज करने का कोई तरीका नहीं मिला है। मैं यह कैसे करु?मैं बूस्ट :: property_tree :: ptree कैसे विलय/अपडेट कर सकता हूं?
नीचे दिए गए कोड को देखते हुए, update_ptree फ़ंक्शन कैसा दिखता है?
#include <iostream>
#include <boost/property_tree/ptree.hpp>
using boost::property_tree::ptree;
class A
{
ptree pt_;
public:
void set_ptree(const ptree &pt)
{
pt_ = pt;
};
void update_ptree(const ptree &pt)
{
//How do I merge/update a ptree?
};
ptree get_ptree()
{
return pt_;
};
};
int main()
{
A a;
ptree pt;
pt.put<int>("first.number",0);
pt.put<int>("second.number",1);
pt.put<int>("third.number",2);
a.set_ptree(pt);
ptree pta = a.get_ptree();
//prints "0 1 2"
std::cout << pta.get<int>("first.number") << " "
<< pta.get<int>("second.number") << " "
<< pta.get<int>("third.number") << "\n";
ptree updates;
updates.put<int>("first.number",7);
a.update_ptree(updates);
pta = a.get_ptree();
//Because the update_tree function doesn't do anything it just prints "0 1 2".
//I would like to see "7 1 2"
std::cout << pta.get<int>("first.number") << " "
<< pta.get<int>("second.number") << " "
<< pta.get<int>("third.number") << "\n";
return 0;
}
मैं नए ptree से अधिक पुनरावृत्ति और का उपयोग कर "डाल" मूल्यों को सम्मिलित करने के बारे में सोचा है। लेकिन "put" को एक प्रकार की आवश्यकता है और मुझे नहीं पता कि नई जानकारी से उस जानकारी को कैसे प्राप्त किया जाए और इसे पुराने ptree के लिए तर्क के रूप में उपयोग करें।
एक बात मैं update_ptree समारोह में की कोशिश की है उपयोग कर रहा है:
pt_.add_child(".",pt);
मूल रूप से मैं pt_ के मार्ग पर एक बच्चे के रूप में pt जोड़ने के लिए प्रयास करें। दुर्भाग्य से यह काम नहीं लग रहा है।
कोई विचार?
मैं किसी भी मदद के लिए आभारी हूं।
धन्यवाद।
(मैं इस सवाल का टैग property_tree और ptree जोड़ने की कोशिश की, लेकिन मैं की अनुमति नहीं थी)
धन्यवाद। यह एक दिलचस्प समाधान है। एक संकलन संकलित करने वाला होगा! लेकिन आपका क्या मतलब है "एक ही पथ के साथ कई नोड्स संभव है"? Tree_1 = "a.b.c" = 0 अद्यतन पेड़ Tree_2 = "a.b.c" = 1, "a.b.d" = 2। केवल "a.b.d" = 2 अपडेट किया जाएगा? (डीबग और देखें) – mantler
एक ही पथ के साथ एक से अधिक नोड होना संभव है। जब Tree_1 में "a.b.c" = 1, "a.b.c" = 2 और Tree_2 में "a.b.c" = 1 होता है, तो Tree_1 के साथ Tree_2 को अपडेट करने के बाद, Tree_2 में "a.b.c" = 2 होगा। –
यह कोड का एक बहुत अच्छा टुकड़ा है। आप कैसे जानते थे कि यह ऑपरेटर path_type पर काम करेगा ?: ptree :: path_type curPath = childPath/ptree :: path_type (it-> पहले); 'मैं नहीं देख सकता कि यह दस्तावेज दस्तावेज में परिभाषित किया गया है। – 2NinerRomeo