में किसी मानचित्र पर रिवर्स में पुन: प्रयास करने के लिए कैसे करें मुझे gcc C++ में किसी मानचित्र पर उलटा होने में परेशानी हो रही है। जब मैं एक रिवर्स इटरेटर का उपयोग करता हूं, ऐसा लगता है कि मैं इसे कुछ भी निर्दिष्ट नहीं कर सकता - संकलक शिकायत करता है। मैं इसके आगे एक अजीब कोड के साथ कुछ अजीब कोड के साथ काम कर रहा हूं, लेकिन यह बहुत ही सुरुचिपूर्ण नहीं है। कोई विचार?सी ++
Q
सी ++
17
A
उत्तर
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;
}
जो आपने हमें नहीं बताया है वह है जो आप करना चाहते हैं। – tpdi
लगता है जैसे आप एक रिवर्स इटरेटर का उपयोग कर रहे हैं, लेकिन अभी भी rbegin और rend के बजाय शुरू और अंत कॉलिंग। जीएमएन का समाधान वह हो सकता है जो आप खोज रहे हैं। लेकिन कुछ कोड पोस्ट करने से हमें आपकी मदद करने में मदद मिलेगी। – Smashery
धन्यवाद - मैंने सोचा कि मैंने rbegin/rend की कोशिश की थी, लेकिन मुझे किसी भी तरह से उलझ जाना होगा। –