प्रदर्शन :
निर्भर करता है।
आपके विशेष मामले में कोई प्रदर्शन अंतर नहीं होगा क्योंकि दोनों को समान रूप से स्मृति में रखा जाएगा।
बहुत विशिष्ट मामले में (यदि आप डेटा सदस्यों में से एक के रूप में एक खाली संरचना का उपयोग कर रहे थे ) तो std::pair<>
संभावित रूप से खाली आधार अनुकूलन (ईबीओ) का उपयोग कर सकता है और संरचना के समकक्ष से कम आकार का हो सकता है। और कम आकार का आम तौर पर उच्च प्रदर्शन का मतलब है:
struct Empty {};
struct Thing { std::string name; Empty e; };
int main() {
std::cout << sizeof(std::string) << "\n";
std::cout << sizeof(std::tuple<std::string, Empty>) << "\n";
std::cout << sizeof(std::pair<std::string, Empty>) << "\n";
std::cout << sizeof(Thing) << "\n";
}
प्रिंट्स: 32, 32, 40, 40 आइडोन पर ।
नोट: मुझे किसी भी कार्यान्वयन के बारे में पता नहीं है जो वास्तव में नियमित जोड़े के लिए ईबीओ ट्रिक का उपयोग करता है, हालांकि यह आमतौर पर ट्यूपल्स के लिए उपयोग किया जाता है।
पठनीयता :
हालांकि, माइक्रो-ऑप्टिमाइज़ेशन के अलावा, एक नामित संरचना अधिक एर्गोनोमिक है।
मेरा मतलब है, map[k].first
कि बुरा नहीं है जबकि get<0>(map[k])
मुश्किल से समझदारी है। इसके विपरीत map[k].name
जो तुरंत इंगित करता है कि हम क्या पढ़ रहे हैं।
यह सभी अधिक महत्वपूर्ण है जब प्रकार एक दूसरे के लिए परिवर्तनीय होते हैं, क्योंकि उन्हें अनजाने में स्वैप करने के बाद एक वास्तविक चिंता बन जाती है।
आप स्ट्रक्चरल बनाम नॉमिनल टाइपिंग के बारे में भी पढ़ना चाह सकते हैं। Ente
एक विशेष प्रकार का है कि केवल चीजें हैं जो उम्मीद से पर संचालित किया जा सकता है Ente
, कुछ भी है कि पर काम कर सकते हैं std::pair<std::string, bool>
उन पर काम कर सकते हैं ... यहां तक कि जब std::string
या bool
शामिल नहीं है वे क्या उम्मीद है, क्योंकि std::pair
कोई है अर्थ विज्ञान इसके साथ जुड़े।
रखरखाव :
रखरखाव के मामले में, pair
सबसे खराब है। आप एक फ़ील्ड नहीं जोड़ सकते।
tuple
उस संबंध में बेहतर मेलों, जब तक आप नए क्षेत्र को जोड़ते हैं तब तक सभी मौजूदा फ़ील्ड एक ही सूचकांक द्वारा एक्सेस किए जाते हैं। जो पहले की तरह ही असंवेदनशील है लेकिन कम से कम आपको उन्हें अपडेट करने की जरूरत नहीं है।
struct
स्पष्ट विजेता है। आप जहां भी मन करे वहां फ़ील्ड जोड़ सकते हैं।
निष्कर्ष के तौर पर:
pair
दोनों दुनिया का सबसे बुरा है,
tuple
बहुत विशिष्ट मामले में थोड़ी बढ़त हो सकती है (खाली प्रकार),
- उपयोग करें
struct
।
नोट: यदि आप गेटर्स का उपयोग करते हैं, तो आप ग्राहकों के बिना खाली आधार चाल का उपयोग कर सकते हैं, जैसा कि इसके बारे में पता नहीं है struct Thing: Empty { std::string name; }
; यही कारण है कि एनकैप्सुलेशन अगला विषय है जिसे आपको अपने आप से चिंतित होना चाहिए।
std::pair
है एक struct।