سؤال

وأنا أحاول أن استخدام set.insert (key) بمثابة الشرطي، حيث إذا تم إدخال المفتاح بشكل صحيح (وهذا يعني أن المفتاح غير موجود بالفعل في المجموعة) ثم فإنه ينبغي على المضي قدما وتنفيذ بعض نوع من التعليمات البرمجية. على سبيل المثال، شيء من هذا القبيل:

if (set.insert( key )) {
    // some kind of code
}

هل هذا جائز؟ لأن المترجم هو رمي هذا الخطأ:

conditional expression of type 'std::_Tree<_Traits>::iterator' is illegal
هل كانت مفيدة؟

المحلول

وإصدار إدراج يأخذ قيمة مفتاح واحد يجب إرجاع std::pair<iterator,bool>، حيث يشير منطقي إذا كان إجراء الإدراج. قيمة حقيقية إلى أن تم إدراج قيمة، ويشير كاذبة أن قيمة كانت موجودة بالفعل. لذلك مشروطا بك سيبدو هذا:

if( set.insert( key ).second ) {
      // code
}

نصائح أخرى

ومجموعة :: إدراج إرجاع الزوج، حاول هذا:

if( set.insert( key ).second ) {
    // some kind of code
}

وإجابات أخرى قد اقترح فقط باستخدام ".second، وهذا العمل - ولكن إذا كانت المعالجة التي تحتاج إلى تنفيذ يستخدم الإدخال الموجود في المجموعة، ثم يمكنك تخزين النتيجة الكاملة للإدراج:

std::pair<std::set<key>::iterator, bool> iResult = set.insert (key);
if (iResult.second) {
    // some kind of code - insert took place
}
else {
    // some kind of code using iResult.first, which
    // is an iterator to the previous entry in the set.
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top