में पूर्णांक के सेट को कनवर्ट करना पूर्णांक के सेट को पूर्णांक के सेट में कनवर्ट करने का सबसे बेवकूफ तरीका क्या है?रेंज
उदा। सेट {0, 1, 2, 3, 4, 7, 8, 9, 11} दिया गया है, मैं {{0,4}, {7, 9}, {11,11}} प्राप्त करना चाहता हूं।
मान लें कि हम std::set<int>
से std::vector<std::pair<int, int>>
में परिवर्तित कर रहे हैं। मैं रेंजों को दोनों तरफ शामिल करता हूं, क्योंकि यह मेरे मामले में अधिक सुविधाजनक है, लेकिन यदि आवश्यक हो तो मैं ओपन-एंडेड श्रेणियों के साथ भी काम कर सकता हूं।
मैंने निम्नलिखित फ़ंक्शन लिखा है, लेकिन मुझे पहिया को फिर से शुरू करने जैसा लगता है। कृपया बताएं कि एसटीएल में कुछ है या इसके लिए बढ़ावा है।
typedef std::pair<int, int> Range;
void setToRanges(const std::set<int>& indices, std::vector<Range>& ranges)
{
Range r = std::make_pair(-INT_MAX, -INT_MAX);
BOOST_FOREACH(int i, indices)
{
if (i != r.second + 1)
{
if (r.second >= 0) ranges.push_back(r);
r.first = i;
}
r.second = i;
}
ranges.push_back(r);
}
मैं एक तकनीक हे (एन) बात के इस प्रकार के लिए अधिक से अधिक किया जा रहा है नहीं देख सकता। गति में केवल वृद्धि ही इसे आपके प्रकार में एकीकृत करने के लिए होगी (यदि आप एक कर रहे हैं) – dangerstat
@ डेंजरस्टैट: अच्छा यह एक और प्रश्न पॉप करता है: यदि कोई डेटा संरचना मौजूद है जो रेंज की सूची को कुशलता से संग्रहित करेगी (किसी प्रकार का पेड़ मुझे लगता है?)। वर्तमान में मैं क्रमांकित सूची के कौन से आइटम चुने गए हैं, इस बारे में जानकारी संग्रहीत करने के लिए मैं सादे std :: set का उपयोग करता हूं। –
एक सेट आंतरिक रूप से एक पेड़ है – Manuel