سؤال

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

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

المحلول

نصائح أخرى

إذا كنت تريد نفس النوع من السلوك ، std::map, ثم تريد std::set.

إذا كنت خلط إدراج/حذف عمليات الاستعلام ، ثم std::set هو على الأرجح أفضل خيار.ومع ذلك ، إذا كان يمكنك ملء المجموعة الأولى ثم اتبع ذلك مع الاستعلامات, قد يكون من المفيد النظر في استخدام std::vector, والفرز ومن ثم استخدام البحث الثنائي للتحقق من وجود في ناقلات.

إذا كنت حقا بحاجة إلى وجود فقط, و لا حتى النظام ، unordered_set.وهي متوفرة من المفضلة لديك C++0x بائع أو boost.org.

إذا كانت البيانات الخاصة بك هو العددية يمكنك استخدام std::ناقلات الذي هو الأمثل الفضاء:

D:\Temp>type vectorbool.cpp
#include <iostream>
#include <vector>

using namespace std;

int main() {
        vector<bool> vb(10);
        vb[5] = true;

        for (vector<bool>::const_iterator ci = vb.begin(); ci != vb.end(); ++ci) {
                cout << *ci << endl;
        }
}

D:\Temp>cl /nologo /W4 /EHsc vectorbool.cpp
vectorbool.cpp

D:\Temp>vectorbool.exe
0
0
0
0
0
1
0
0
0
0

ربما يجب أن ننظر stl::set للحصول على ما تحتاجه.A stl::bitset هو خيار آخر.

ذلك يعتمد على كيفية كنت بحاجة إلى استخدام المعلومات التي من شأنها أن تحدد أي من هذه هو أفضل.A set هو فرز البيانات هيكل ، الإدراج ، والعثور على حذف تأخذ O(LOG N) مرة.ولكن إذا كنت بحاجة إلى تكرار على كل القيم التي وضعت علامة على "الوجود" ثم set هو الطريق للذهاب.

إذا كنت تحتاج فقط إلى علامة البحث الواقع أن هناك عضو من مجموعة ثم bitset قد يكون من الأفضل بالنسبة لك.الإدراج ، بحث فقط يأخذ O(1) ، ولكن يمكنك جمع سوى int القيم.بالتكرار على جميع ملحوظ القيم سوف تأخذ O(N) كما تحتاج إلى الذهاب من خلال مجموعة كاملة للعثور على الأعضاء أن يتم تعيين true.يمكنك استخدامه في الحفل مع المحكمة الخاصة بلبنان::خريطة إلى خريطة من القيم التي يجب أن القيم العددية في bitset الاحتياجات.

نظرة على العمليات التي تحتاج إلى أداء مع القيم في مجموعة الخاص بك و يجب أن تكون قادرا على اختيار المناسب هيكل البيانات

يمكنك الاستمرار في استخدام std::خريطة الغرض المطلوب.

للتحقق ما إذا كان بند معين (من نوع مفتاح) موجود في الخريطة أم لا ، يمكنك استخدام التعليمات البرمجية التالية:

if (mapObj.count(item) != 0)
{
   // item exists
}

كما أجاب في وقت سابق ، std::مجموعة سيتم القيام بهذه المهمة أيضا.ومن المثير للاهتمام على حد سواء ، مجموعة الخريطة هي تمثيل الأشجار داخليا.

إذا كان المفتاح هو القيمة ، فإنك قد تنظر أيضا في "بلوم تصفية" بدلا من مجموعة.

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