2011-04-13 13 views
19

क्या सी ++ 0x में बूस्ट के बिमप के लिए उपयोग करने योग्य विकल्प है?क्या कोई बूस्ट है। सी ++ 11 में बिपाप विकल्प?

मैं बूस्ट से बचना चाहता हूं, लेकिन पूरी तरह से सी ++ 11 को गले लगाऊंगा। यदि आवश्यक हो, तो बूस्ट के बिमाप का एक पतला संस्करण मेरे लिए काम करेगा (मुझे अपने कार्यक्रम के दौरान enums और इसी स्ट्रिंग के बीच स्विच करने के लिए निरंतर बिटमैप चाहिए)। मानचित्र संकलन-समय स्थिर होगा, इसलिए शायद दो मैन्युअल रूप से बनाए रखा मानचित्र भी इष्टतम समाधान नहीं हैं।

धन्यवाद!

अद्यतन: मैं कोड परियोजना पर इस मिला, लेकिन यह लाइसेंस लगता है एक मुद्दा हो सकता: http://www.codeproject.com/KB/stl/bimap.aspx?fid=12042&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=151#xx0xx

मैं सिर्फ एक स्वच्छ और आसान समाधान (एक शीर्ष लेख/स्रोत फ़ाइल या थोड़ा अतिरिक्त के लिए देख रहा हूँ, के रूप में दो दर्पण वाले नक्शे मेरे मामले में समान रूप से ठीक हैं)।

+5

आप बूस्ट का उपयोग करने से क्यों बचना चाहते हैं? यदि यह आपकी समस्या हल करता है ... ध्यान दें कि बूस्ट में कई अलग-अलग पुस्तकालय शामिल हैं, जिनमें से कुछ ने इसे मानक में बनाया है, लेकिन इनमें से कई मानक में जोड़े जाने के लिए बहुत विशिष्ट हैं। –

+0

@ डेविड: मैं समझता हूं, लेकिन 1) विंडोज़ पर बूस्ट एक परेशानी है, 2) मैं इस परियोजना के साथ सी ++ सीखना चाहता हूं; मुझे पता है कि बूस्ट सी ++ है और इसे सीखने का एक अच्छा तरीका है, लेकिन मैं देखना चाहता हूं कि मैं खुद क्या कर सकता हूं और पहले से मौजूद कार्यक्षमता को खोज सकता हूं। अजीब स्पष्टीकरण मुझे पता है, लेकिन बूस्ट (मुझे आवश्यकता होगी) में सब कुछ गैर-हेडर-केवल सामान की आवश्यकता है, जो कम से कम बड़ा है। और मैं अभी बस बूस्ट के आसपास से बचने/काम करने में सक्षम हूं, मैं इसे इस तरह से रखना चाहता हूं। मैंने समस्या को एक कंटेनर रैपर में कम कर दिया है जो अनिवार्य रूप से दो मानचित्र अपडेट रखता है, जो वास्तव में खुद को करने के लिए मुश्किल नहीं है। – rubenvb

+5

विंडोज़ को कैसे परेशानी है, खासकर जब हेडर-केवल लाइब्रेरी जैसे boost.bimap के बारे में बात करते हैं? हेडर निकालें, उन्हें अपनी निर्देशिकाओं में शामिल करें, किया गया। – ildjarn

उत्तर

10

मेरे भावना उन्हें अन्य पुस्तकालयों/एसटीएल के साथ काम कर रहा है काम है कि बूस्ट पुस्तकालयों में चला जाता है की एक बहुत कुछ है।

यदि आपको उस क्षमता की आवश्यकता नहीं है, तो आप केवल std::map<X*, Y*> और std::map<Y*, X*> के साथ कक्षा का उपयोग कर सकते हैं। फिर निम्न विधियों की तरह हैं: add(X,Y), remove(X,Y), get_left(X) और get_right(Y)

यदि आप प्रतियां स्टोर करना चाहते हैं, add(X,Y) स्मृति आवंटित कर सकता है, और remove(X,Y) डी-आवंटित कर सकता है। साथ ही, आप एक विनाशक को परिभाषित कर सकते हैं जो शेष तत्वों पर remove(X,Y) पर कॉल करता है।

+0

यह std नहीं होना चाहिए: नक्शा और std :: मानचित्र Gio

39

संक्षिप्त उत्तर: नहीं।

लंबा उत्तर: नहीं।


यह ध्यान देने योग्य है कि सी ++ 1 के transparent comparators के लिए समर्थन समय * की Boost.Bimap 90% की आवश्यकता समाप्त: जब आप किसी भी बंद प्रमुख की जरूरत है किसी ऑब्जेक्ट (संग्रहीत या गणना) की संपत्ति दी गई है, वैसे भी वस्तु में अंतर्निहित/उपस्थित होने के लिए अक्सर एक सरल, बिटवाई-तुलनीय अद्वितीय पहचानकर्ता। पारदर्शी तुलनित्रों के साथ, आप किसी ऑब्जेक्ट की तुलना किसी भी संभावित मूल्य से कर सकते हैं, केवल प्रकार के द्वारा भेदभाव किया जाता है, जब तक कि कहा गया मूल्य किसी ऑब्जेक्ट से इसे म्यूट किए बिना प्राप्त/गणना किया जा सके।

* एक guesstimate, नहीं एक आंकड़ा

+10

मुझे नहीं पता कि यह इतना ऊंचा क्यों है - मुझे लगता है कि एक बेहतर "लंबा जवाब" एक संक्षिप्त स्पष्टीकरण होगा कि इसे आवश्यक समझा नहीं गया है; एक और मूर्खतापूर्ण दृष्टिकोण क्या होगा। मुझे लगता है कि बहुत से लोग (मैं निश्चित रूप से दोषी हूं) बूस्ट भर में ठोकर खा रहा है जब वे एक बहुत सी ++ - वाई रास्ता में एक साथ कुछ हैक करने की कोशिश कर रहे हैं; सीखने से बचने के लिए ओपी की इच्छा अच्छी है मुझे लगता है (कम से कम क्योंकि मैं इसे साझा नहीं करता)। – OJFord

+2

@ ओलीफ़ोर्ड: यह एक जीभ-इन-गाल मजाक था, क्योंकि 'नो' अपने उत्तर के रूप में पोस्ट करने के लिए बहुत छोटा था। ; -] – ildjarn

+2

तो पारदर्शी तुलनाकर्ता कैसे एक enum <-> स्ट्रिंग bimap परिभाषित करने में मदद करेंगे? इससे यह जवाब वास्तव में मेरे प्रश्न का उत्तर देगा। वर्तमान में, यह उपयोगिता के संकेत के बिना सी ++ 14 फीचर के लिए एक उथले विज्ञापन की तरह पढ़ता है। – rubenvb

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