كيفية الحصول على العناصر ن أول من الأمراض المنقولة جنسيا :: خريطة

StackOverflow https://stackoverflow.com/questions/1809227

  •  05-07-2019
  •  | 
  •  

سؤال

وبما أنه لا يوجد .resize () دالة عضو في C ++ الأمراض المنقولة جنسيا :: خريطة كنت أتساءل، كيف يمكن للمرء الحصول على الأمراض المنقولة جنسيا :: خريطة مع على الأكثر ن العناصر.

والحل واضح هو خلق حلقة من 0 إلى n واستخدام مكرر الألف كمعلمة الأول عن الأمراض المنقولة جنسيا :: محو ().

وكنت أتساءل إذا كان هناك أي حل لا تحتاج إلى حلقة (على الأقل ليس في رمز المستخدم بلدي) وهو أكثر "الطريق STL للذهاب".

هل كانت مفيدة؟

المحلول

ويمكنك استخدام std::advance( iter, numberofsteps ) لذلك.

نصائح أخرى

والحل الشامل لأي حاوية تقريبا، مثل الأمراض المنقولة جنسيا :: قائمة، الأمراض المنقولة جنسيا :: الخريطة، تعزيز :: multi_index. يجب عليك التحقق من حجم الخريطة الخاصة بك فقط.

template<class It>
It myadvance(It it, size_t n) {
   std::advance(it, n);
   return it;
}

template<class Cont>
void resize_container(Cont & cont, size_t n) {
    cont.erase(myadvance(cont.begin(), std::min(n, cont.size())), 
                 cont.end());
}

والطريقة الصحيحة لذلك هي استخدام STD :: مسبقا. ولكن هنا هو (بطيئة) بشكل مضحك السماح ل"استخدام تغيير حجم على الخريطة. أكثر عموما، وهذا النوع من خدعة يمكن أن تستخدم لأمور أخرى تعمل على ناقلات ولكن ليس على الخريطة.

map<K,V> m; //your map
vector< pair<K,V> > v(m.begin(), m.end());
v.resize(n);
m = map<K,V>(v.begin(),v.end());

ووالأمراض المنقولة جنسيا :: الخريطة ليست قائمة. لا توجد عناصر "أول ن".

وراجع للشغل: المكررات تصبح باطلة إذا تم تغيير حاوية

.

إذا كنت حقا بحاجة الى خريطة أصغر هل يمكن تكرار على الرغم من أنه وإضافة جميع العناصر حتى ن عشر لرسم خريطة جديدة.

وماذا تريد تغيير حجم الخريطة؟

لا يتم تخزين العناصر في خريطة في أي أمر - أول 'ن' لا يعني أي شيء في الواقع

وتحرير:
ومن المثير للاهتمام STD :: خريطة لديها أمر، ولست متأكدا مدى فائدة هذا المفهوم.
هي مقالات في نفس ترتيب مثل مفاتيح منتديات ماذا يعني ذلك؟ إذا كان لديك أسماء مرتبطا بواسطة SSN يعني ذلك أسماء يتم تخزينها في SSN ترتيب رقمي؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top