कैसे काम करता है यह प्रश्न सीधे using char as a key in stdmap से संबंधित है।std :: मैप में एक कुंजी के रूप में char * का उपयोग करके, यह
मैं समझता हूं कि तुलनात्मक कार्य क्या करता है और इसकी आवश्यकता char *
प्रकारों के लिए क्यों की जाती है। हालांकि, मैं अनिश्चित हूं कि अद्यतन वास्तव में कैसे काम करता है।
मैं उस मामले के बारे में उत्सुक हूं जहां आप एक कुंजी अपडेट कर रहे हैं। std::map
कैसे const char *
, cmp_str
के बीच समानता की तुलना करने के बारे में जानता है केवल पेड़ में डालने वाली कुंजी को ऑर्डर करने के लिए बताता है।
मैंने stl_tree.h
कोड (pulled from here) में थोड़ा खोद दिया है लेकिन बहुत कुछ नहीं मिला। मेरा एकमात्र अनुमान यह है कि यह सीधे स्मृति तुलना कर रहा है।
मुझे इस बात की दिलचस्पी है कि अंडरलिंग stl_tree
कक्षा इस स्थिति को कैसे संभालती है, या अगर यह सही ढंग से इसे संभाल नहीं पाती है, तो किनारे का मामला तोड़ता है?
कोड
#include <map>
#include <iostream>
#include <cstring>
struct cmp_str
{
bool operator()(char const *a, char const *b)
{
return std::strcmp(a, b) < 0;
}
};
int main (int argc, char ** argv)
{
std::map<const char*, int, cmp_str> map;
map["aa"] = 1;
map["ca"] = 2;
map["ea"] = 3;
map["ba"] = 4;
map["ba"] = 5;
map["bb"] = 6;
map["ba"] = 7;
std::map<const char*, int, cmp_str>::iterator it = map.begin();
for (; it != map.end(); it++)
{
std::cout << (*it).first << ": " << (*it).second << std::endl;
}
return 0;
}
आउटपुट
aa: 1
ba: 7
bb: 6
ca: 2
ea: 3
मुझे लगता है कि यह एक memcmp प्रकार ऑपरेशन गहराई से है। – Whyrusleeping
कोई विशेष कारण है कि आप कुंजी के रूप में 'std :: string' का उपयोग क्यों नहीं करते हैं? – nneonneo
मेरे प्रोफेसर ने उपर्युक्त 'cmp_str' फ़ंक्शन लिखा और मैंने सवाल उठाया, उसके पास इस सवाल का जवाब नहीं था। मैंने कुछ परीक्षण चलाए और किनारे के मामले में तोड़ने में सक्षम नहीं थे, लेकिन मैं अभी भी काम करता हूं कि यह कैसे काम करता है, क्योंकि मुझे लगता है कि यह तालिका में एक और प्रविष्टि डालेगा। – travis