2010-05-05 28 views
9

हाय सब मैं एक सदस्य समारोहनक्शा ऑपरेटर [] ऑपरेंड

int tt = 6; 
vector<set<int>>& temp = m_egressCandidatesByDestAndOtMode[tt]; 
set<int>& egressCandidateStops = temp.at(dest); 

में निम्नलिखित और एक सदस्य चर के निम्नलिखित घोषणा

map<int, vector<set<int>>> m_egressCandidatesByDestAndOtMode; 

लेकिन जब (इंटेल संकलक संकलन मैं कोई त्रुटि मिलती है 11.0)

1>C:\projects\svn\bdk\Source\ZenithAssignment\src\Iteration\PtBranchAndBoundIterationOriginRunner.cpp(85): error: no operator "[]" matches these operands 
1>   operand types are: const std::map<int, std::vector<std::set<int, std::less<int>, std::allocator<int>>, std::allocator<std::set<int, std::less<int>, std::allocator<int>>>>, std::less<int>, std::allocator<std::pair<const int, std::vector<std::set<int, std::less<int>, std::allocator<int>>, std::allocator<std::set<int, std::less<int>, std::allocator<int>>>>>>> [ const int ] 
1>   vector<set<int>>& temp = m_egressCandidatesByDestAndOtMode[tt]; 
1>                 ^

मुझे पता है कि यह मूर्खतापूर्ण होना है लेकिन मैं नहीं देख सकता कि मैंने क्या गलत किया है।

अद्यतन मैं एक स्थिरांक सदस्य समारोह जिसके कारण सदस्य चर के प्रकार स्थिरांक है से फोन कर रहा हूँ तो मैंने सोचा था कि निम्नलिखित की तरह कुछ इसे ठीक करना चाहिए:

int dest = 0, tt = 6; 
const set<int>& egressCandidateStops = m_egressCandidatesByDestAndOtMode[tt].at(dest); 

लेकिन कोई पासा .. अभी भी एक ही त्रुटि है।

+0

Potatoswatter से जवाब सही है। अपनी समस्या से बचने के लिए, आपको ढूंढने की आवश्यकता है। – fulmicoton

उत्तर

20

संकार्य प्रकार हैं: स्थिरांक std :: नक्शा < पूर्णांक ...

map::operator[] एक const map साथ काम नहीं करता।

I answered कुछ दिन पहले।

मानचित्र :: ऑपरेटर [] थोड़ा अजीब है। यह यह करता है:

  1. कुंजी की तलाश करें।
  2. यदि मिला, तो इसे वापस करें।
  3. यदि नहीं, तो इसे सम्मिलित करें और इसके संबंधित मान को डिफ़ॉल्ट बनाएं।
  4. फिर नए मान का संदर्भ वापस करें।

चरण 3 स्थिरता के साथ असंगत है। दो अलग-अलग-कार्य करने वाले ऑपरेटर [] अधिभार के बजाय, भाषा आपको पर नक्शा देती है :: कॉन्स ऑब्जेक्ट्स के लिए खोजें। ताकि आप एक स्थिरांक सदस्य समारोह से एक सदस्य पर कॉल नहीं कर सकते

+0

ठीक है यह !! मैं सात मिनट में उत्तर के रूप में चिह्नित करूंगा, मुझे नहीं पता कि मैं पहले से क्यों नहीं कर सकता ... अगर उत्तर सही है तो यह सही है :) –

+0

शायद 'std :: map :: at' का उल्लेख करने लायक है। – juanchopanza

5

प्रोटोटाइप [] के लिए,

data_type& operator[](const key_type& k) 

अर्थात एक गैर स्थिरांक ऑपरेशन है।

आप के लिए कोड को बदल सकता है:

std::map<...>::const_iterator where = m_egressCandidatesByDestAndOtMode.find(tt); 
if (egressCandidatesByDestAndOtMode.end() != where) { 
    const vector<set<int>>& temp = where->second; 
} 
संबंधित मुद्दे