الانتقال إلى المحتوى الرئيسي

كيف أقوم بفرز الخريطة حسب قيمة ج?

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

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

لنلق نظرة على مثال لفرز خريطة حسب القيمة في ج باستخدام مصفوفة مؤقتة. أولا ، نقوم بإنشاء مصفوفة لتخزين أزواج القيمة الرئيسية. ثم نقوم بنسخ محتويات خريطتنا إلى هذه المصفوفة. بعد ذلك ، نحن فرز مجموعة لدينا باستخدام وظيفة كسورت. أخيرا ، نقوم بالكتابة فوق القيم الموجودة في خريطتنا بالقيم المصنفة من المصفوفة.

  1. كيف أقوم بفرز الخريطة حسب قيمة ج?
  2. ما هي الخريطة وكيف تعمل?
  3. الطرق الأساسية لفرز الخريطة
  4. كيف يمكنني استخدام وظيفة الفرز في الخريطة?
  5. كيف أقوم بفرز الخريطة بترتيب تصاعدي?
  6. كيف أقوم بفرز الخريطة بترتيب تنازلي?
  7. أمثلة على استخدام فرز الخرائط حسب قيمة ج
  8. 1. باستخدام بنية بيانات مساعدة
  9. 2. باستخدام وظيفة لامدا
  10. 3. استخدام هيكل مع مشغل زائد هو أقل
  11. سؤال وجواب
  12. كيف أقوم بفرز الخريطة حسب القيمة باستخدام وظيفة المقارنة?
  13. كيفية فرز الخريطة حسب القيمة باستخدام تعبيرات لامدا?
  14. هل هناك وظيفة في المعيار ج library مكتبة لفرز الخريطة مباشرة حسب القيمة دون إنشاء هياكل مؤقتة?

كيف أقوم بفرز الخريطة حسب قيمة ج?

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

Ниже приведен пример кода, иллюстрирующий процесс сортировки خريطة по значению:

# تشمل 

# تشمل

# تشمل

بول قارن (كونست ستد:: زوج و أ ، كونست ستد:: زوج و ب) {

العودة أ. الثانية < ب. الثانية;

}

كثافة العمليات الرئيسية () {

الأمراض المنقولة جنسيا::خريطة ميماب;

خريطتي.إدراج (الأمراض المنقولة جنسيا:: جعل_زوج (1 ، 10));

خريطتي.إدراج (الأمراض المنقولة جنسيا:: جعل_زوج (2 ، 5));

خريطتي.إدراج (الأمراض المنقولة جنسيا:: جعل_زوج (3 ، 7));

خريطتي.إدراج (الأمراض المنقولة جنسيا:: جعل_زوج (4 ، 12));

الأمراض المنقولة جنسيا::ناقلات الأمراض

الأمراض المنقولة جنسيا::فرز (خريطة الفرز.تبدأ () ، فرزالخريطة.النهاية () ، قارن);

ل (السيارات عليه: سورتدماب) {

الأمراض المنقولة جنسيا:: كوت < < ذلك.أولا << ": "<<ذلك.ثانيا < < الأمراض المنقولة جنسيا:: إندل;

}

العودة 0;

}

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

الناتج:

2: 5

3: 7

1: 10

4: 12

وبالتالي ، تم فرز الخريطة بنجاح حسب القيمة بترتيب تصاعدي.

ما هي الخريطة وكيف تعمل?

الخريطة (المصفوفة الترابطية ، القاموس) هي بنية بيانات تسمح لك بتخزين الكائنات في شكل قيمة مفتاح. في لغات البرمجة الأخرى ، يمكن أيضا تسمية الخريطة بقاموس أو تجزئة أو مصفوفة ارتباطية أو مصفوفة ارتباطية.

الخريطة ملائمة للاستخدام عندما تحتاج إلى ربط قيم معينة بمفاتيحها الفريدة. على سبيل المثال ، في مصفوفة ارتباطية ، يمكنك تخزين أزواج "الاسم الأخير — رقم الهاتف" و "اسم المنتج — سعره" وما إلى ذلك.

المزايا الرئيسية للخريطة:

  • الوصول السريع إلى القيم الأساسية. يتم إجراء البحث عن قيمة في الخريطة في وقت قريب من ثابت ، بغض النظر عن حجم المجموعة.
  • ترتيب العناصر. على عكس الكائن العادي في جافا سكريبت ، يتم تخزين العناصر الموجودة في الخريطة بترتيب الإضافة ويتم اجتيازها بهذا الترتيب.

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

العمل مع خريطة يتضمن عمليات لإضافة وحذف والبحث وتغيير العناصر. لإضافة عنصر إلى الخريطة ، استخدم عامل التشغيل [] أو طريقة المجموعة(المفتاح ، القيمة). للبحث عن قيمة حسب المفتاح ، استخدم عامل التشغيل [] أو طريقة الحصول على(مفتاح). لحذف عنصر حسب المفتاح ، استخدم عامل الحذف أو طريقة الحذف(المفتاح).

مثال على استخدام الخريطة في جافا سكريبت:

كونست دليل الهاتف = خريطة جديدة();

دليل الهاتف.مجموعة ('إيفانوف' ، '+ 7 123 456-78-90');

دليل الهاتف.مجموعة ('بتروف' ، '+7 987 654-32-10');

دليل الهاتف.مجموعة ('سيدوروف' ، '+7 567 890-12-34');

وحدة التحكم.سجل (دليل الهاتف.الحصول على ('بتروف')) ؛ / / سوف الإخراج: +7 987 654-32-10

دليل الهاتف.يحذف ('سيدوروف');

وحدة التحكم.سجل (دليل الهاتف.لديه ('سيدوروف')) ؛ / / المخرجات: خطأ

وبالتالي ، فإن الخريطة هي بنية بيانات مفيدة وفعالة توفر الوصول إلى القيم حسب المفتاح وتحافظ على ترتيب العناصر. يستخدم على نطاق واسع في مختلف مجالات البرمجة لحل مجموعة متنوعة من المهام.

الطرق الأساسية لفرز الخريطة

حسب القيمة.

  • 1. باستخدام الحاوية

.

الأمراض المنقولة جنسيا::خريطة مابداتا;

// ملء مابداتا...

// إنشاء حاوية مساعدة

الأمراض المنقولة جنسيا::مولتيماب سورتيدمابداتا;

// نسخ العناصر من مابداتا إلى سورتيدمابداتا

ل (كونست السيارات والزوج : مابداتا) {

سورتيدمابداتا.إدراج(الأمراض المنقولة جنسيا::جعل_زوج (زوج.ثانيا ، زوج.أولا));

}

// إخراج العناصر بترتيب مرتبة حسب القيمة

ل (كونست السيارات والزوج : سورتيدمابداتا) {

الأمراض المنقولة جنسيا:: كوت << زوج.أولا<<": "< < زوج.ثانيا < < الأمراض المنقولة جنسيا:: إندل;

}

  • 2. باستخدام ناقل مساعد

في أزواج قيمة المفتاح. ثم يمكننا استخدام خوارزميات قياسية لفرز المتجه حسب القيمة واجتياز العناصر بترتيب مرتبة.

الأمراض المنقولة جنسيا::خريطة مابداتا;

// ملء مابداتا...

// إنشاء متجه مساعد

الأمراض المنقولة جنسيا::vector

// Функция для сравнения пар ключ-значение по значению

bool compareByValue(const std::pair& a, const std::pair& b) {

return a.second < b.second;

}

// Сортировка вектора по значению

std::sort(vectorData.begin(), vectorData.end(), compareByValue);

// Вывод элементов в отсортированном порядке по значению

for (const auto& pair : vectorData) {

std::cout << pair.first << ": " << pair.second << std::endl;

}

حسب القيمة. تستخدم كلتا الطريقتين حاويات مساعدة لتخزين العناصر بترتيب مرتبة ، ولكن باستخدام حاويات وأساليب مختلفة. يعتمد اختيار الطريقة على متطلبات وخصائص المهمة المحددة.

كيف يمكنني استخدام وظيفة الفرز في الخريطة?

في ج container ، حاوية الخريطة القياسية هي حاوية ترابطية تخزن العناصر بترتيب مرتبة حسب المفتاح. ومع ذلك ، في بعض الأحيان يكون من الضروري فرز الخريطة ليس حسب المفتاح ، ولكن حسب القيمة. للقيام بذلك ، يمكنك استخدام وظيفة الفرز.

بادئ ذي بدء ، عليك أن تفهم أن الخريطة عبارة عن حاوية تتكون من زوج من القيم: مفتاح وقيمة. لفرز الخريطة حسب القيمة ، يمكنك استخدام حاوية مساعدة تخزن أزواجا من القيم بترتيب عكسي. بعد ذلك ، يمكنك استخدام وظيفة الفرز لهذه الحاوية المساعدة.

فيما يلي نموذج رمز يوضح كيفية استخدام وظيفة الفرز في الخريطة:

# تشمل

# تشمل

# تشمل

كثافة العمليات الرئيسية () {

الأمراض المنقولة جنسيا::خريطة ميماب;

ميماب ["ج"] = 3;

ميماب ["ب"] = 2;

الخريطة ["أ"] = 1;

// إنشاء حاوية مساعدة باستخدام الأمراض المنقولة بالاتصال الجنسي:: الخريطة:: مقارنة القيمة

الأمراض المنقولة جنسيا وظيفة:: ناقلات

// فرز متجه أزواج القيم حسب القيمة

الأمراض المنقولة جنسيا::فرز (خريطة الفرز.تبدأ () ، فرزالخريطة.نهاية () ،[] (كونست ستد::زوج و أ ، كونست ستد::زوج و ب) {

العودة أ. الثانية < ب. الثانية;

});

// إخراج الخريطة المصنفة

ل (كونست السيارات والزوج : سورتيدماب) {

الأمراض المنقولة جنسيا:: كوت << زوج.أولا<<": "< < زوج.ثانيا < < الأمراض المنقولة جنسيا:: إندل;

}

العودة 0;

}

نتيجة لتنفيذ هذا الرمز ، سيتم الحصول على خريطة مرتبة حسب القيمة ، وهي:

  1. ج: 1
  2. ب: 2
  3. ج: 3

في هذا المثال ، نقوم بإنشاء حاوية مساعدة سورتدماب ، والتي يتم تهيئة مع أزواج من القيم من خريطة ميماب. ثم نقوم بفرز هذه الحاوية المساعدة حسب القيمة باستخدام وظيفة ستد:: الفرز ، وتمرير وظيفة لامدا كوسيطة لمقارنة العناصر. في دالة لامدا هذه ، نقارن قيم أزواج المفاتيح والقيمة. وأخيرا ، نقوم بإخراج القيم التي تم فرزها من الحاوية المساعدة سورتدماب.

وبالتالي ، فإن استخدام وظيفة الفرز يسمح لك بفرز الخريطة حسب القيمة بدلا من المفتاح.

كيف أقوم بفرز الخريطة بترتيب تصاعدي?

يعد فرز الخريطة بترتيب تصاعدي للقيم مهمة شائعة عند العمل مع البيانات. لحل هذه المشكلة ، يمكنك استخدام الخوارزمية التالية:

  1. احصل على جميع قيم الخريطة في قائمة منفصلة.
  2. فرز قائمة القيم بترتيب تصاعدي.
  3. إنشاء خريطة فارغة جديدة.
  4. انتقل إلى قائمة القيم التي تم فرزها وأضف المفاتيح والقيم المقابلة إلى الخريطة الجديدة.

مثال على تنفيذ هذه الخوارزمية في ج C:

# تشمل 

# تشمل

# تشمل

# تشمل

كثافة العمليات الرئيسية () {

الأمراض المنقولة جنسيا:: خريطة خريطة = {

{"تفاحة" ، 5},

{"موز" ، 3},

{"الكرز" ، 7},

{"durian", 2}

};

// Получение всех значений в отдельный список

std::vector values;

for (const auto& pair : myMap) {

values.push_back(pair.second);

}

// Сортировка списка значений по возрастанию

std::sort(values.begin(), values.end());

// Создание нового map

std::map sortedMap;

for (const auto& value : values) {

for (const auto& pair : myMap) {

if (pair.second == value) {

sortedMap.insert(pair);

break;

}

}

}

// Вывод отсортированного map

for (const auto& pair : sortedMap) {

std::كوت < < زوج.أولا<<": "< < زوج.ثانيا < < الأمراض المنقولة جنسيا:: إندل;

}

العودة 0;

}

نتيجة لتنفيذ هذا الرمز ، سوف نحصل على الإخراج التالي:

دوريان: 2

الموز: 3

أبل: 5

الكرز: 7

وبالتالي ، نجحنا في فرز الخريطة بترتيب تصاعدي للقيم.

كيف أقوم بفرز الخريطة بترتيب تنازلي?

إنها حاوية مرتبة ، وقد يتطلب ذلك بعض الخطوات الإضافية.

في ترتيب عكسي:

الأمراض المنقولة جنسيا:: خريطة الخريطة الأصلية;

// إضافة عناصر إلى الخريطة الأصلية

// إنشاء خريطة متعددة جديدة ونسخ العناصر من الخريطة الأصلية

الأمراض المنقولة جنسيا::مولتيماب

بحيث يتم ترتيب العناصر بترتيب تنازلي للمفاتيح.

في ترتيب تنازلي للقيم ، يمكنك استخدام نهج مماثل ، ولكن مع تعريف واستخدام المقارنة الخاصة بك مقارنة القيم:

هيكل فاليكومباراتور {

قالب

عامل منطقي () (كونست تي واليسار ، كونست يو واليمين) كونست {

عودة اليسار.ثانيا > حق.ثانيا;

}

};

الأمراض المنقولة جنسيا:: خريطة الخريطة الأصلية;

// إضافة عناصر إلى الخريطة الأصلية

// إنشاء مولتيماب جديدة ونسخ العناصر من أوريجينالماب باستخدام فالويكومباراتور

الأمراض المنقولة جنسيا::خريطة متعددة الخريطة(الخريطة الأصلية.ابدأ () ، الخريطة الأصلية.نهاية ());

. يقارن قيم العناصر بترتيب تنازلي.

.

التي يمكن استخدامها للوصول إلى العناصر في ترتيب تنازلي.

أمثلة على استخدام فرز الخرائط حسب قيمة ج

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

1. باستخدام بنية بيانات مساعدة

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

# تشمل

# تشمل

# تشمل

# تشمل

// وظيفة للفرز حسب القيمة

بول قارن (كونست ستد:: زوج و أ ، كونست ستد:: زوج و ب) {

العودة أ. الثانية < ب. الثانية;

}

كثافة العمليات الرئيسية () {

الأمراض المنقولة جنسيا::خريطة مابداتا;

// ملء بيانات الخريطة

مع مابداتا ["تفاحة"] = 5;

مابداتا ["الموز"] = 2;

مابداتا ["برتقالي"] = 8;

مابداتا ["العنب"] = 3;

// نسخ عناصر الخريطة إلى متجه لأزواج القيمة الرئيسية

الأمراض المنقولة جنسيا::ناقلات الأمراض

// فرز المتجه حسب القيمة

الأمراض المنقولة جنسيا::فرز (فيداتا.تبدأ () ، فيداتا.النهاية () ، قارن);

// إخراج القيم المصنفة

ل (كونست السيارات والزوج : فيداتا) {

الأمراض المنقولة جنسيا:: كوت << زوج.أولا<<": "< < زوج.ثانيا < < الأمراض المنقولة جنسيا:: إندل;

}

العودة 0;

}

نتيجة تنفيذ البرنامج:

الموز: 2

العنب: 3

أبل: 5

البرتقالي: 8

2. باستخدام وظيفة لامدا

هناك طريقة أخرى لفرز الخريطة حسب القيمة وهي استخدام وظيفة لامدا كمقارن عند استدعاء وظيفة الفرز. على سبيل المثال:

# تشمل

# تشمل

# تشمل

كثافة العمليات الرئيسية () {

الأمراض المنقولة جنسيا::خريطة مابداتا;

// ملء بيانات الخريطة

مع مابداتا ["تفاحة"] = 5;

مابداتا ["الموز"] = 2;

مابداتا ["برتقالي"] = 8;

mapData["grape"] = 3;

// Сортировка map по значению с использованием лямбда-функции

std::sort(mapData.begin(), mapData.end(), [](const std::pair& a, const std::pair& b) {

return a.second < b.second;

});

// Вывод отсортированных значений

for (const auto& pair : mapData) {

std::cout << pair.first << ": " << pair.second << std::endl;

}

return 0;

}

Результат выполнения программы:

banana: 2

grape: 3

apple: 5

orange: 8

3. استخدام هيكل مع مشغل زائد هو أقل

هناك طريقة أخرى لفرز الخريطة حسب القيمة وهي إنشاء بنية يكون فيها المشغل الأقل (<) مثقلا بشكل زائد لمقارنة العناصر حسب القيمة. ثم استخدم هذه البنية كمقارن عند استدعاء وظيفة الفرز. على سبيل المثال:

# تشمل

# تشمل

# تشمل

// الهيكل ذو المشغل الزائد أقل

من قيم مقارنة البنية {

عامل منطقي () (كونست ستد::زوج و أ ، كونست ستد::زوج و ب) {

العودة أ. الثانية < ب. الثانية;

}

};

كثافة العمليات الرئيسية () {

الأمراض المنقولة جنسيا::خريطة مابداتا;

// ملء بيانات الخريطة

مع مابداتا ["تفاحة"] = 5;

مابداتا ["الموز"] = 2;

مابداتا ["برتقالي"] = 8;

مابداتا ["العنب"] = 3;

// فرز الخريطة حسب القيمة باستخدام

الأمراض المنقولة جنسيا::ترتيب هيكل (مابداتا.تبدأ () ، مابداتا.النهاية () ، مقارنة القيم());

// إخراج القيم المصنفة

ل (كونست السيارات والزوج : مابداتا) {

الأمراض المنقولة جنسيا:: كوت << زوج.أولا<<": "< < زوج.ثانيا < < الأمراض المنقولة جنسيا:: إندل;

}

العودة 0;

}

نتيجة تنفيذ البرنامج:

الموز: 2

العنب: 3

أبل: 5

البرتقالي: 8

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

سؤال وجواب

كيف أقوم بفرز الخريطة حسب القيمة باستخدام وظيفة المقارنة?

لفرز الخريطة حسب القيمة باستخدام وظيفة المقارنة ، يمكنك استخدام بنية بيانات مثل المتجه

كيف أقوم بفرز الخريطة حسب القيمة باستخدام تعبيرات لامدا?

لفرز الخريطة حسب القيمة باستخدام تعبيرات لامدا ، يمكنك استخدام بنية بيانات مثل المتجه

هل هناك أي وظيفة في المعيار ج library مكتبة لفرز الخريطة مباشرة حسب القيمة دون إنشاء هياكل مؤقتة?

لا ، لا توجد وظيفة مباشرة في مكتبة سي standard القياسية لفرز الخريطة مباشرة حسب القيمة دون إنشاء هياكل مؤقتة. ومع ذلك ، يمكنك استخدام الطرق المذكورة أعلاه لفرز الخريطة حسب القيمة مع إنشاء متجه زمني للأزواج. قد يسمح لك هذا بتجاوز القيود المرتبطة بفرز الخرائط والحصول على بيانات مرتبة بناء على القيم.