मेरे पास C++ में एक unordered map (umap) है:

unordered_map<int, bool> dTimeResetUmap;

मैं इसका मूल्य निर्धारित कर रहा हूं जैसे:

dTimeResetUmap[person.object_id] = true;

person.object_id कोई भी पूर्णांक संख्या 0, 1, 2, 3 हो सकती है। कोड में निश्चित बिंदु पर, मुझे इसमें सभी मानों को संशोधित करना होगा (मूल रूप से सभी मानों को false के रूप में बनाना होगा) जो मैं नीचे की तरह कर रहा हूं:

int size_of_dTimeResetUmap = dTimeResetUmap.size();

for (int i = 0; i <= size_of_dTimeResetUmap; i++)
{
    dTimeResetUmap[i] = false;
}

लेकिन ऐसा लगता है कि कुछ मूल्य के लिए काम नहीं कर रहा है। लंबे समय तक चलने वाले कोड के बाद, dTimeResetUmap के अंदर कुछ मान होते हैं जो false के बजाय true रहते हैं। क्या कारण हो सकता है। क्या यह मूल्यों को अद्यतन करने का एक अच्छा तरीका नहीं है। कृपया मदद करें धन्यवाद।

0
S Andrew 31 अक्टूबर 2019, 12:03

3 जवाब

सबसे बढ़िया उत्तर

मानचित्र के प्रत्येक तत्व पर जाने के लिए C++ पुनरावृत्तियों का उपयोग करें:

for (auto & element : dTimeResetUmap)
{
    element.second = false;
}
4
Darren Smith 31 अक्टूबर 2019, 12:07

यदि आप मानचित्र में किसी मान तक पहुँचने के लिए अनुक्रमण ऑपरेटर [] का उपयोग करते हैं, और कुंजी मानचित्र में नहीं है, तो डिफ़ॉल्ट "शून्य" मान के साथ एक नया कुंजी-मान युग्म बनाया जाएगा।

bool मान के लिए, यह "शून्य" false के बराबर होगा।

तो सभी तत्वों को false पर सेट करने का सबसे आसान तरीका केवल निकालना है सभी तत्व तब गैर-मौजूदा कुंजियों तक सभी पहुंच false मान बनाएगी:

dTimeResetUmap.clear();
4
Some programmer dude 31 अक्टूबर 2019, 12:07

आप एसटीएल इटरेटर्स का उपयोग कर सकते हैं;

for (auto it = umap.begin(); it != umap.end(); it++) {
  (*it).second = false;
}
1
Slavi 31 अक्टूबर 2019, 12:09