4 EYLÜL 2009, Cuma
Özel nesneleri bir vektör sıralama
Nasıl bir vektör içeren özel sıralama (kullanıcı tanımlı yani) nesneleri yok.< / ^ br . Muhtemelen, standart STL algoritmasısıralamaözel alanlar (sıralama için bir anahtar olarak) üzerinde faaliyet gösterecek olan bir yüklem (bir işlev veya işlev nesnesi) ile birlikte nesne kullanılmalıdır.< / ^ br . Doğru yolda mıyım?
CEVAP
4 EYLÜL 2009, Cuma
Basit bir örnek std::sort
kullanarak
struct MyStruct
{
int key;
std::string stringValue;
MyStruct(int k, const std::string& s) : key(k), stringValue(s) {}
};
struct less_than_key
{
inline bool operator() (const MyStruct& struct1, const MyStruct& struct2)
{
return (struct1.key < struct2.key);
}
};
std::vector < MyStruct > vec;
vec.push_back(MyStruct(4, "test"));
vec.push_back(MyStruct(3, "a"));
vec.push_back(MyStruct(2, "is"));
vec.push_back(MyStruct(1, "this"));
std::sort(vec.begin(), vec.end(), less_than_key());
Düzenleme:Kirill V. Lyadvinsky, yüklem bir tür sağlama yerine belirttiği gibi, geçersiz kılma&; MyStruct
operatör lt:
struct MyStruct
{
int key;
std::string stringValue;
MyStruct(int k, const std::string& s) : key(k), stringValue(s) {}
bool operator < (const MyStruct& str) const
{
return (key < str.key);
}
};
Bu yöntemi kullanarak sadece aşağıdaki gibi vektör tür anlamına gelir
std::sort(vec.begin(), vec.end());
Edit2:Olarak Kappa da geçersiz ^ göre azalan sırada vektör sıralayabilirsiniz gösteriyor . operatör ve bir nevi Ara biraz değiştirerek:
struct MyStruct
{
int key;
std::string stringValue;
MyStruct(int k, const std::string& s) : key(k), stringValue(s) {}
bool operator > (const MyStruct& str) const
{
return (key > str.key);
}
};
Ve sıralama aramalısın:
std::sort(vec.begin(), vec.end(),greater<MyStruct>());
Bunu Paylaş:
Sıralama Özel Sınıf Listesi<T>...
Sıralama özelliği ile özel Nesne Array...
JavaScript nesneleri bir dizi sıralama...
C statik kurucular ? özel statik nesne...
Std::Kopyalama Bir push_back ile nesne...