Avatar ·

هل هناك مزايا لـ map على unordered_map للمفاتيح البسيطة (int, string)؟

مرحبًا بالجميع! أكتب بلغة C++ منذ حوالي عام، وهناك سؤال يقلقني. لنفترض أنني بحاجة لتخزين قاموس حيث المفاتيح هي int أو string. أعلم أن `std::map` مطبَّق كشجرة حمراء-سوداء (O(log n) لكل عملية)، بينما `std::unordered_map` مطبَّق كجدول تجزئة (O(1) في المتوسط). يبدو أن `unordered_map` دائمًا أسرع للمفاتيح البسيطة، وكثيرًا ما أراه يُوصى به للمبتدئين. لكن في StackOverflow صادفت نقاشًا حيث يؤكد مطورون ذوو خبرة أن `map` له مزايا. حاولت كتابة اختبار صغير: ```cpp #include #include #include #include int main() { std::map ordered; std::unordered_map unordered; // نملأ بـ 100000 عنصر for (int i = 0; i < 100000; ++i) { ordered[i] = "value_" + std::to_string(i); unordered[i] = "value_" + std::to_string(i); } // البحث for (int i = 0; i < 100000; ++i) { auto it1 = ordered.fin