2009-04-08 9 views
17

में किसी मानचित्र पर रिवर्स में पुन: प्रयास करने के लिए कैसे करें मुझे gcc C++ में किसी मानचित्र पर उलटा होने में परेशानी हो रही है। जब मैं एक रिवर्स इटरेटर का उपयोग करता हूं, ऐसा लगता है कि मैं इसे कुछ भी निर्दिष्ट नहीं कर सकता - संकलक शिकायत करता है। मैं इसके आगे एक अजीब कोड के साथ कुछ अजीब कोड के साथ काम कर रहा हूं, लेकिन यह बहुत ही सुरुचिपूर्ण नहीं है। कोई विचार?सी ++

+0

जो आपने हमें नहीं बताया है वह है जो आप करना चाहते हैं। – tpdi

+0

लगता है जैसे आप एक रिवर्स इटरेटर का उपयोग कर रहे हैं, लेकिन अभी भी rbegin और rend के बजाय शुरू और अंत कॉलिंग। जीएमएन का समाधान वह हो सकता है जो आप खोज रहे हैं। लेकिन कुछ कोड पोस्ट करने से हमें आपकी मदद करने में मदद मिलेगी। – Smashery

+0

धन्यवाद - मैंने सोचा कि मैंने rbegin/rend की कोशिश की थी, लेकिन मुझे किसी भी तरह से उलझ जाना होगा। –

उत्तर

36

यहाँ एक std::map के माध्यम से पिछड़े पुनरावृत्ति का एक उदाहरण है:

std::map<std::string, std::string>::reverse_iterator 
:

#include <iostream> 
#include <map> 
#include <string> 

int main() { 
    std::map<std::string, std::string> m; 
    m["a"] = "1"; 
    m["b"] = "2"; 
    m["c"] = "3"; 

    for (auto iter = m.rbegin(); iter != m.rend(); ++iter) { 
     std::cout << iter->first << ": " << iter->second << std::endl; 
    } 
} 

आप पूर्व सी ++ 11, तुम बस auto उल्लेख करने के लिए जो है की आवश्यकता होगी, कर रहे हैं

ध्यान दें कि यदि आप बूस्ट का उपयोग कर रहे हैं, तो आप एक रिवर्स एडाप्टर के साथ लूप के लिए एक श्रेणी-आधारित का उपयोग कर सकते हैं:

#include <boost/range/adaptor/reversed.hpp> 

for (auto& iter : boost::adaptors::reverse(m)) { 
    std::cout << iter.first << ": " << iter.second << std::endl; 
} 
+0

टाइपनाम को –

+0

की आवश्यकता नहीं है ओह, मैं हाल ही में बहुत सारी टेम्पलेट सामग्री लिख रहा हूं, मैंने इसे हटा दिया, धन्यवाद। : एक्स – GManNickG

+1

क्या 'ऑटो' का उपयोग करना संभव है? – Chani