كورس 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
وهنا نبدأ الدخول لعالم تصميم البرمجيات الاحترافية 🚀

تعليقات
إرسال تعليق