C++ liste elemanlarını sırayla yazdırma nasıl yapılır?

Katılım
18 Kasım 2016
Mesajlar
516
Makaleler
1
Arkadaşlar selamlar. Birkaç gün içinde ödevimle uğraşırken Pythonda olan metodların eksiğini çekmeye başladım C++'da kodlama yaparken. Örneğin .sort metodu ile liste elemanlarını büyükten küçüğe sıralarken C++'da bunu yapamadım. Ekteki görselde kod tüm filmler ve puanları sırayla yazıldığı için bir sorun olmadan bastırılıp çalışıyor ama ya tüm puanlar karışık olsaydı o zaman bunları C++'da nasıl yazdırabilirim?
1635006867792.png
 
Son düzenleyen: Moderatör:
Bu program sadece bunu mu yapacak?
Bu programla ilgili konu açıp duruyorsunuz. Asıl isteğinizin ne olduğunu tam olarak söylemiyorsunuz. Ben bu şekilde yapardım.

std::sort kendisi algıladı gibi duruyor. Algılamasaydı fonksiyon yazıp parametre olarak verilebilirdi.
Algılamamış, string'in ilk karakterine baktı herhalde.

Anlamadığınız yeri sorabilirsiniz. Varsayılan olarak küçükten büyüğe sıralar. Tersi için fonksiyondaki küçüktürü büyüktür yapmak en kolay şeklidir diye düşünüyorum.

Kod:
#include <iostream>
#include <string>
#include <utility>
#include <vector>
#include <algorithm>

bool cmpMovies(std::pair<std::string, double>& p1, std::pair<std::string, double>& p2) {
    return p1.second < p2.second;
}

int main() {
    std::vector<std::pair<std::string, double>> v{
        {"12 Angry Man", 8.9}
    };

    v.push_back(std::make_pair("The GodFather", 9.1));
    v.push_back({ "The Dark Knight", 9.0 });
    v.emplace_back("Pulp Fiction", 8.8);
    /* ... */

    std::sort(v.begin(), v.end(), cmpMovies);

    for (auto& [f, s] : v) {
        std::cout << f << " " << s << "\n";
    }

}
 
Son düzenleme:
C++:
string movies[] = { "The Godfather", "The dark knight", "12 Angry men"};
float ranking[] = { 9.1, 9.0, 8.9 };

for (int i = 0; i < (sizeof(ranking) / sizeof(ranking[0])) - 1; i++)
{
    for (int j = i + 1; j < (sizeof(ranking) / sizeof(ranking[0])); j++)
    {
        // Küçükten büyüğe sıralamak için ranking[i] > ranking[j]
        // Büyükten küçüğe sıralamak için ranking[i] < ranking[j]
        if (ranking[i] < ranking[j])
        {
            string tmp_string = movies[j];
            movies[j] = movies[i];
            movies[i] = tmp_string;

            float tmp_rank = ranking[j];
            ranking[j] = ranking[i];
            ranking[i] = tmp_rank;
        }
    }
}

for (int i = 0; i < (sizeof(ranking) / sizeof(ranking[0])); i++)
{
    printf("Film: %s, Rank: %.1f\n", movies[i].c_str(), ranking[i]);
}
 
Çok teşekkür ederim öncelikle. sizeof(ranking) / sizeof(ranking[0]) işlemi tam olarak ne yapıyor biraz daha açıklayabilir misiniz rica etsem. Kavramakta biraz zorlandım.
Tanımladığınız değişkende kaç tane eleman varsa onun sonucu veriyor. Yani ranking değişkeninde 3 eleman var sonuç 3 olarak size veriyor.
 

Yeni konular

Geri
Yukarı