2010-01-29 6 views
24

मैं सी ++ सीखने की कोशिश कर रहा हूं और अभी मैं एक प्रोग्राम लिख रहा हूं जिसे पूर्णांक के जोड़े की सूची आउटपुट करने की आवश्यकता है।मैं सी ++ में संख्याओं की एक जोड़ी कैसे स्टोर कर सकता हूं?

इसे संभालने का सबसे अच्छा तरीका क्या है? मेरे पास स्कूल में हमारे लिनक्स कंप्यूटर पर बूस्ट लाइब्रेरी उपलब्ध नहीं है, इसलिए मुझे विश्वास नहीं है कि मैं boost :: tuple का उपयोग कर सकता हूं।

कोई सुझाव? क्या एसटीएल (मानक टेम्पलेट लायब्रेरी) के रूप में जाना जाता है के

यह मानक सी ++ और भाग:

+1

यदि आपके पास g ++ का पर्याप्त हालिया संस्करण है जिसमें tr1 समर्थन है, तो 'boost :: tuple' को 'std :: tr1 :: tuple' के रूप में शामिल किया गया है; जैसा कि अन्य नीचे दिए गए उत्तरों में नोट करते हैं, हालांकि, आप जोड़े के लिए 'std :: pair' का उपयोग कर सकते हैं। –

उत्तर

31

std::pair<object, object>

संपादित करें पर एक नज़र डालें। यह सामान्य डेटा संरचनाओं का एक संग्रह है जो सामान्य हैं (यानी किसी भी C++ ऑब्जेक्ट प्रकार को स्टोर करने के लिए उपयोग किया जा सकता है)। इस विशेष संरचना का उपयोग "टुपल" या संख्याओं की एक जोड़ी को एक साथ स्टोर करने के लिए किया जाता है। यह मूल रूप से "प्रथम" और "दूसरा" सदस्यों के साथ एक वस्तु है जो आपके द्वारा संग्रहीत की गई पहली और दूसरी वस्तुओं (किसी भी प्रकार का!) का संदर्भ देता है।

तो बस pair<int, int> की एक सरणी की घोषणा, या बेहतर अभी तक, pair<int, int> की एक गतिशील आकार सूची बनाने के लिए एक और एसटीएल "वेक्टर" कहा जाता है प्रकार का उपयोग करें: vector<pair<int, int> > myList

अरे आप क्या जानते हैं! जोड़ों की एक गतिशील रूप से आकार की सूची पहले से मौजूद है और इसे मानचित्र कहा जाता है! इसका उपयोग जितना आसान है और map<int, int> myMap घोषित करना !!!

संपादित करें:

हाँ, के रूप में बताया, एक नक्शा अच्छी तरह से "मानचित्र" एक दूसरे के लिए वस्तु है, तो आप बाईं साइड मूल्यों दोहराया नहीं जा सकता है। यदि यह ठीक है तो नक्शा वह है जिसे आप ढूंढ रहे हैं, अन्यथा जोड़ी के वेक्टर से चिपके रहें .... या मल्टीमैप्स पर नज़र डालें।

std::map, std::multimap

+0

ध्यान दें कि जोड़ी को आउटपुट को 'cout' द्वारा नियंत्रित नहीं किया जाएगा (क्योंकि यह 'int' या' double' के लिए है) - आपको इसे अलग से संभालना होगा। – dirkgently

+5

सी ++ 98 और सी ++ 03 में, आपको 'वेक्टर <जोड़ी >' (अंत में स्थान पर ध्यान दें!) का उपयोग करना चाहिए क्योंकि '>> 'पारदर्शी" दाएं शिफ्ट "के रूप में है। यह सी ++ 0x में तय किया जाएगा। – ephemient

+0

हां, ज़ाहिर है! अपडेट किया गया, इसे पकड़ने के लिए धन्यवाद! –

17

उपयोग std :: जोड़ी?

#include <utility> 
#include <iostream> 

int main() { 
    std::pair <int, int> p = std::make_pair(1, 2); 
    std::cout << p.first << " " << p.second << std::endl; 
} 

आप जोड़े का एक वेक्टर बना सकते हैं:

typedef std::pair <int, int> IntPair; 

... 

std::vector <IntPair> pairs; 
pairs.push_back(std::make_pair(1, 2)); 
pairs.push_back(std::make_pair(3, 4)); 
+0

क्या आप मानचित्र पर std :: जोड़ी का सुझाव देंगे? – Mithrax

+0

मिथ्राक्स, मानचित्र जोड़ी के चारों ओर सिर्फ एक रैपर है। यह आंतरिक रूप से जोड़ी कोड का उपयोग करता है। –

+1

@ मिथ्रेक्स यह निर्भर करता है कि आप जोड़े के साथ क्या करना चाहते हैं। यदि कोई एक कुंजी है और एक मूल्य है, तो आपको std :: map का उपयोग करना चाहिए, जिसे वास्तव में std :: pair का उपयोग करके लागू किया गया है। –

9

जबकि std :: जोड़ी सबसे अच्छा तरीका उपयोग करने के लिए, मैं हैरान कोई भी उल्लेख कर रहा हूँ पूर्व एसटीएल समाधान है:

struct Pair { 
    int first; 
    int second; 
}; 

यह चिंताजनक है कि लोग सोचते हैं कि उन्हें ऐसी छोटी समस्या के लिए बढ़ावा की आवश्यकता है।

+1

प्री -एसटीएल पूर्व मानक, पिछले सहस्राब्दी की तरह? और आप सोचते हैं कि किसी ने इसका उल्लेख क्यों नहीं किया? इसके अतिरिक्त, आपके कोड में 'std :: pair' की कई महत्वपूर्ण/अच्छी विशेषताएं नहीं हैं, इसलिए यह चित्रण उद्देश्य के लिए भी सेवा नहीं करती है। वास्तव में, इस विधि का उल्लेख करने का क्या उद्देश्य है? –

+0

कोनराड, मैंने कहा था कि std :: जोड़ी बेहतर है। मुझे नहीं पता कि मेरा कोड चित्रण उद्देश्य के लिए क्यों नहीं कार्य करता है। मेरा मुख्य बिंदु यह था कि कभी-कभी लोग सरल समाधान भूल जाते हैं। – shura

+1

यदि आप केवल सी ++ सीखने की कोशिश कर रहे हैं, तो यह आसानी से प्रस्तुत किया गया सबसे अच्छा जवाब है। यह सरल, जटिल और अन्य समस्याओं के अनुकूल होना आसान है। एक बार जब वे संरचना के लिए उपयोग करते हैं, कक्षा में अनुकूल होते हैं और MyObject.SecondValue जैसी चीजों के तरीकों को उपलब्ध कराने के लिए सिखाते हैं। ऊपर सरणी सुझाव के साथ संयुक्त (यानी जोड़ी [] MyValues) वास्तव में इस उत्तर को स्वीकार न करने का कोई कारण नहीं है। – nathanchere

संबंधित मुद्दे

 संबंधित मुद्दे