🔥 أحدث الأخبار

موقع يهتم بكل ماهو جديد في عالم التكنولوجيا والرياضة

كورس C++ المتقدم – الحلقة السابعة: STL Advanced (المكتبة القياسية المتقدمة)

 

كورس C++ المتقدم – الحلقة السابعة: STL Advanced (المكتبة القياسية المتقدمة)

#برمجة

مقدمة

مرحباً بك في الحلقة السابعة من المستوى المتقدم في C++.

في الحلقات السابقة تعلمنا:

  • Templates
  • Exception Handling
  • Smart Pointers
  • Lambda Functions
  • Multithreading
  • File Handling + Serialization

واليوم ندخل إلى واحد من أهم أجزاء C++ الاحترافية:

STL Advanced

أي:

Standard Template Library المتقدمة


ما هي STL؟

هي مكتبة جاهزة تحتوي على:

✔ هياكل بيانات
✔ خوارزميات
✔ أدوات قوية للتعامل مع البيانات

بدلاً من كتابة كل شيء من الصفر.


أهم عناصر STL المتقدمة

سنركز اليوم على:

  • map
  • set
  • unordered_map
  • algorithms (sort, find, count)
  • binary search

أولاً: map

ما هو map؟

هو:

تخزين بيانات على شكل (مفتاح → قيمة)


مثال من الحياة

ID → Name
1  → Ahmed
2  → Ali

كود map

#include <iostream>
#include <map>
using namespace std;

int main()
{
    map<int, string> students;

    students[1] = "Ahmed";
    students[2] = "Ali";
    students[3] = "Khaled";

    cout << students[2];

    return 0;
}

الناتج

Ali

المرور على map

for(auto s : students)
{
    cout << s.first << " - " << s.second << endl;
}

ما معنى first و second؟

العنصر المعنى
first المفتاح
second القيمة

ثانياً: set

ما هو set؟

هو:

مجموعة لا تسمح بالتكرار


مثال

#include <iostream>
#include <set>
using namespace std;

int main()
{
    set<int> numbers;

    numbers.insert(10);
    numbers.insert(20);
    numbers.insert(10);

    for(int n : numbers)
        cout << n << " ";

    return 0;
}

الناتج

10 20

مميزات set

✔ يمنع التكرار
✔ يرتب تلقائياً
✔ سريع في البحث


ثالثاً: unordered_map

الفرق عن map

map unordered_map
مرتب غير مرتب
أبطأ قليلاً أسرع

مثال

#include <iostream>
#include <unordered_map>
using namespace std;

int main()
{
    unordered_map<int, string> data;

    data[1] = "A";
    data[2] = "B";

    cout << data[1];

    return 0;
}

رابعاً: Algorithms

STL تحتوي على أدوات جاهزة.


sort

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector<int> v = {5,1,9,3,7};

    sort(v.begin(), v.end());

    for(int x : v)
        cout << x << " ";

    return 0;
}

الناتج

1 3 5 7 9

sort تنازلي

sort(v.begin(), v.end(), greater<int>());

خامساً: find

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector<int> v = {10,20,30};

    auto it = find(v.begin(), v.end(), 20);

    if(it != v.end())
        cout << "Found";
}

سادساً: count

int c = count(v.begin(), v.end(), 10);
cout << c;

سابعاً: binary_search

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    int arr[] = {1,2,3,4,5};

    if(binary_search(arr, arr+5, 3))
        cout << "Found";

    return 0;
}

مهم جداً

binary_search يعمل فقط على بيانات مرتبة.


مثال عملي شامل

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector<int> v = {4,2,9,1,5};

    sort(v.begin(), v.end());

    for(int x : v)
        cout << x << " ";

    cout << endl;

    if(binary_search(v.begin(), v.end(), 5))
        cout << "Found 5";

    return 0;
}

مقارنة بين STL Containers

الأداة الاستخدام
vector مصفوفة ديناميكية
map مفاتيح وقيم
set قيم بدون تكرار
unordered_map أسرع map

أين تستخدم STL؟

✔ أنظمة قواعد البيانات
✔ الذكاء الاصطناعي
✔ الألعاب
✔ السيرفرات
✔ تطبيقات ضخمة


أخطاء شائعة

❌ نسيان include المناسب
❌ استخدام binary_search بدون sort
❌ الخلط بين map و unordered_map
❌ تعديل set مباشرة


تمرين 1

أنشئ map يحتوي ID → اسم.


تمرين 2

استخدم set لحذف التكرار.


تمرين 3

رتب vector تنازلياً.


تمرين 4

ابحث عن عنصر باستخدام find.


تمرين 5

استخدم binary_search على array.


ملخص الحلقة السابعة

تعلمنا:

  • map
  • set
  • unordered_map
  • sort
  • find
  • count
  • binary_search
  • استخدام STL المتقدم

في الحلقة الثامنة سنتعلم:

🔥 Advanced OOP & Design Patterns

وسنتعلم:

  • Inheritance المتقدم
  • Polymorphism الحقيقي
  • Abstraction
  • Interfaces
  • Singleton Pattern
  • Factory Pattern

وهنا نبدأ الدخول لعالم تصميم البرمجيات الاحترافية 🚀


تعليقات

💬 🙋🏻‍♂️