मेरे पास दो एसटीएल कंटेनर हैं जिन्हें मैं एक से अधिक बार दिखाई देने वाले किसी भी तत्व को हटाने, विलय करना चाहता हूं। उदाहरण के लिए:डुप्लिकेट तत्वों को हटाने, एकाधिक एसटीएल कंटेनरों को मर्ज करने का सबसे अच्छा तरीका?
typedef std::list<int> container;
container c1;
container c2;
c1.push_back(1);
c1.push_back(2);
c1.push_back(3);
c2.push_back(2);
c2.push_back(3);
c2.push_back(4);
container c3 = unique_merge(c1, c2);
// c3 now contains the following 4 elements:
// 1, 2, 3, 4
std :: अद्वितीय केवल आसन्न तत्वों के लिए हो रहा है और मेरे मामले में कंटेनर किसी भी क्रम में हो सकता है।
container unique_merge(const container& c1, const container& c2)
{
std::set<container::value_type> s;
BOOST_FOREACH(const container::value_type& val, c1)
s.insert(val);
BOOST_FOREACH(const container::value_type& val, c2)
s.insert(val);
return container(s.begin(), s.end());
}
वहाँ एक बेहतर तरीका है या मैं खून बह रहा है स्पष्ट कुछ छूट गया है: मैं कुछ std :: प्रवंचना सेट मुझे लगता है कि कर सकता है?
यदि आप कुछ "रक्तस्राव स्पष्ट" मांगते हैं, तो आपका कार्यान्वयन मौसमी मामलों के लिए पर्याप्त है। लेकिन ओ (एन * लॉग (एम)) की लागत पर एक बेहतर एल्गोरिदम मौजूद है, जहां एन सभी कंटेनरों में तत्वों की कुल संख्या है, और एम कंटेनरों की संख्या है। कोड छोटा नहीं है, जब मेरे पास समय है तो मैं बाद में लिखूंगा। – RnMss