मेरे पास एक std::vector ऐसा है

std::vector<std::pair<T,T>> xyz. xyz की लंबाई 10 है और दूसरा फ़ंक्शन std::pair<T,T> के साथ ठीक 3 स्पॉट, जैसे 4, 6 और 8 को भरता है। वेक्टर के माध्यम से पुनरावृति करते हुए, मैं जानना चाहता हूं कि गैर-रिक्त स्थान कहां हैं ताकि मैं आगे std::pair<T,T> के साथ काम कर सकूं।

मुझे लगता है कि मैं c++17 के std::optional<> का उपयोग कर सकता हूं लेकिन मैं c++14 का उपयोग कर रहा हूं। क्या किसी std::vector में स्पॉट का पता लगाने का कोई तरीका है जो c++14 में खाली नहीं है।

फ़ंक्शन से असाइनमेंट के बाद वेक्टर कुछ इस तरह दिखेगा

index  value
 0:
 1:
 2:
 3:
 4:    <7,8>
 5:
 6:    <9,2>
 7:
 8:    <8,6>
 9:

मैं उपरोक्त वेक्टर पर पुनरावृति करना चाहता हूं और केवल std::pairs प्रिंट करना चाहता हूं

0
Morpheus 4 अप्रैल 2020, 18:55

1 उत्तर

सबसे बढ़िया उत्तर

यदि आप अपने डेटा-स्ट्रक्चर पर कुछ काम नहीं करते हैं, तो आप ऐसा नहीं कर सकते हैं, क्योंकि वेक्टर में प्रत्येक तत्व को इनिशियलाइज़ किया जाता है।

मुझे लगता है कि सबसे सरल और तेज़ तरीका यह है कि एक ही आकार के std::vector<bool> को स्टोर करने के लिए स्टोर करना है कि क्या तत्व न केवल प्रारंभ किया गया है, बल्कि बाद में "संशोधित" भी है।

यदि आप चिंता करते हैं कि आप अन्य वेक्टर सेट करना भूल सकते हैं, तो उन्हें एक साथ बांधें:

std::vector<std::pair<std::pair<int, int>, bool>> a;

अगर आपको अभी भी लगता है कि यह बहुत बदसूरत है, तो आपको अपना खुद का सरल optional लागू करना पड़ सकता है

1
John Ding 4 अप्रैल 2020, 16:32