SORU
11 Kasım 2008, Salı


Nasıl çift çifti ikinci unsuru tabanlı bir vektör sıralama?

Çift bir vektör var

std::vector<std::pair<int, int> > vec;

ve kolay bir şekilde artırmak amacıyla çifti ikinci unsuru göre sıralamak için var mı?

İş yapacak, ama orada STL ve std mevcut parçaları kullanmak için bir yol olduğunu küçük bir işlev nesnesi yazabilirim biliyorum::daha az işi doğrudan yapmak için?

EDİT: ayrı bir işlev veya sınıf sıralamak için üçüncü bağımsız değişken geçmek için yazabilirim bunu anlıyorum. Soru ya da bunu yapabilirim olup olmadığını standart şeyler dışında. Gerçekten benzer bir şey istiyorum

std::sort(vec.begin(), vec.end(), std::something_magic<int, int, std::less>());

CEVAP
11 Kasım 2008, Salı


Sadece özel bir karşılaştırıcı (std::sort isteğe bağlı 3. bir argüman değil) kullanın

struct sort_pred {
    bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) {
        return left.second < right.second;
    }
};

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

Eğer C 11 bir derleyici kullanıyorsanız, aynı kullanarak Lambda yazabilirsiniz:

std::sort(v.begin(), v.end(), [](const std::pair<int,int> &left, const std::pair<int,int> &right) {
    return left.second < right.second;
});

EDİT: Sorunuzun düzenlemelerinizi yanıt olarak, burada bazı düşünceler ... eğergerçektenister yaratıcı olun ve bu kavramı yeniden muktedir bir sürü, bir şablon olun:

template <class T1, class T2, class Pred = std::less<T2> >
struct sort_pair_second {
    bool operator()(const std::pair<T1,T2>&left, const std::pair<T1,T2>&right) {
        Pred p;
        return p(left.second, right.second);
    }
};

o zaman bu da yapabilirsin:

std::sort(v.begin(), v.end(), sort_pair_second<int, int>());

hatta

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

Dürüst olmak gerekirse, bu biraz abartılı olur, ama sadece 3 satır fonksiyon yazın ve bitsin :-P

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DavideoDesign

    DavideoDesig

    24 NİSAN 2006
  • SRT Photoshop Tutorials

    SRT Photosho

    19 Aralık 2012
  • UnboxTechnology

    UnboxTechnol

    20 Ocak 2011

İLGİLİ SORU / CEVAPLAR