में कुंजी प्रकार के रूप में उपयोग किया जा सकता है क्या मैं std::map
बना सकता हूं जहां कुंजी प्रकार एक संदर्भ प्रकार है, उदा। Foo &
और यदि नहीं, तो क्यों नहीं?क्या एक संदर्भ प्रकार एसटीएल मानचित्र
उत्तर
सी ++ मानक 23.1.2/7 key_type
के अनुसार असाइन किया जाना चाहिए। संदर्भ प्रकार नहीं है। std :: नक्शे के लिए एक महत्वपूर्ण प्रकार के रूप में
नहीं, क्योंकि std :: map में कई फ़ंक्शन कुंजीपटल का संदर्भ लेते हैं और संदर्भों के संदर्भ C++ में अवैध हैं।
/ए.बी.
operator[](const key_type & key)
पर विचार करें। यदि key_type
Foo &
है तो const key_type &
क्या है? बात यह है कि यह काम नहीं करता है। आप एक std :: मानचित्र नहीं बना सकते जहां कुंजी प्रकार एक संदर्भ प्रकार है।
सूचक पूरी तरह से कानूनी
#include <iostream>
#include <cstdlib>
#include <map>
using namespace std;
int main()
{
int a = 2;
int b = 3;
int * c = &a;
int * d = &b;
map<int *, int> M;
M[c]=356;
M[d]=78;
return 0;
}
initialised संदर्भ नहीं कर सकते कुंजी हो रहा है:
#include <iostream>
#include <cstdlib>
#include <map>
using namespace std;
int main()
{
int a = 2;
int b = 3;
int & c = a;
int & d = b;
map<int &, int> M;
M[c]=356;
M[d]=78;
return 0;
}
In file included from /usr/include/c++/4.4/map:60,
from test.cpp:3:
/usr/include/c++/4.4/bits/stl_tree.h: In instantiation of 'std::_Rb_tree<int&, std::pair<int&, int>, std::_Select1st<std::pair<int&, int> >, std::less<int&>, std::allocator<std::pair<int&, int> > >':
/usr/include/c++/4.4/bits/stl_map.h:128: instantiated from 'std::map<int&, int, std::less<int&>, std::allocator<std::pair<int&, int> > >'
test.cpp:14: instantiated from here
/usr/include/c++/4.4/bits/stl_tree.h:1407: error: forming pointer to reference type 'int&
'
पर एक निहित रूपांतरण है ध्यान रखें कि पॉइंटर्स के आधार पर ऑर्डरिंग गैर-निर्धारिती है और कार्यक्रम के प्रत्येक आमंत्रण के साथ बदलने की संभावना है। –
उल्लेख नहीं है कि चाबियाँ समानता के लिए तुलना की जाती हैं, और इसलिए यह लुकअप करते समय पॉइंटर पता मानों की तुलना कर रहा है, और पॉइंटर-मूल्य की तुलना नहीं करता है। विशेष रूप से, इस उदाहरण में यदि कोई अन्य int e = 2 था, और आपने एम [& e] देखा, तो आपको वह नहीं मिलेगा जो आप सोच सकते हैं कि आप ढूंढ रहे हैं। – mmocny
- 1. एसटीएल मानचित्र -
- 2. क्या एसटीएल मानचित्र डालने पर आदिम प्रकार शुरू करते हैं?
- 3. एसटीएल: स्टोर संदर्भ या मूल्य?
- 4. एसटीएल मानचित्र में पोस्टऑर्डर ट्रैवर्सल
- 5. एक गूगल मानचित्र प्रकार
- 6. एक संदर्भ प्रकार
- 7. सी ++ एसटीएल में एसटीएल
- 8. सी ++ एसटीएल मानचित्र बनाम वेक्टर गति
- 9. एसटीएल कंटेनर में लगातार संदर्भ
- 10. सी ++ एसटीएल unordered_map कार्यान्वयन, संदर्भ वैधता
- 11. फ़ंक्शन पॉइंटर्स के एक एसटीएल मानचित्र का उपयोग
- 12. एसटीएल मानचित्र के लिए कस्टम मेमोरी आवंटक
- 13. एसटीएल मानचित्र सम्मिलन दक्षता: [] बनाम डालने
- 14. एसटीएल मानचित्र में सॉर्ट ऑर्डर करें और
- 15. एसटीएल फ़ंक्शंस
- 16. संदर्भ प्रकार
- 17. अनुप्रयोग संदर्भ में मानचित्र प्रारंभ का मानचित्र
- 18. एक (सामान्य) मान प्रकार जबरदस्ती एक संदर्भ
- 19. मैं सी ++ में एसटीएल मानचित्र में संदर्भ क्यों संग्रहीत नहीं कर सकता?
- 20. सी ++ एसटीएल वेक्टर: push_back संदर्भ लेने
- 21. अप्रत्याशित स्कैला मानचित्र प्रकार
- 22. एसटीएल
- 23. एसटीएल संदर्भों वाले
- 24. एसटीएल मानचित्र कस्टम के साथ तुलना समारोह वस्तु
- 25. एक प्रकार एक संदर्भ प्रकार और एक मूल्य प्रकार एक ही समय में हो सकता है?
- 26. एसटीएल का मुद्दा क्या है?
- 27. फ़ंक्शन प्रकार के लिए एक रैल्यू संदर्भ क्या है?
- 28. सी # में पूर्णांक संदर्भ प्रकार क्या है?
- 29. एक वैल्यू टाइप (एनम) और संदर्भ प्रकार के बीच ऑटोमैपर मानचित्र कर सकते हैं? (स्ट्रिंग)
- 30. क्या एसटीएल मानचित्र हमेशा प्रारंभ() से अंत() तक पुनरावृत्ति करते समय एक ही ऑर्डर देता है?
से +1 एक अच्छा सवाल है कि कई पूछने से डरते हैं। – laura
सीधे नहीं, लेकिन 'boost :: context_wrapper' काम करना चाहिए। इसका 'फू और ' –
MSalters