Bir STL vektörünü iki farklı karşılaştırma kriterine göre nasıl sıralayabilirim? Varsayılan sort() işlevi yalnızca tek bir sıralayıcı nesnesi alır.Bir STL vektörünün iki değerde ayrılması
cevap
İki kriteri bir arada birleştirmeniz gerekir. Her bir yapı, bir birinci ve ikinci alan ile birinci alana, sonra ikinci alana göre nasıl sıraladığınıza bir örnek.
#include <algorithm>
struct MyEntry {
int first;
int second;
};
bool compare_entry(const MyEntry & e1, const MyEntry & e2) {
if(e1.first != e2.first)
return (e1.first < e2.first);
return (e1.second < e2.second);
}
int main() {
std::vector<MyEntry> vec = get_some_entries();
std::sort(vec.begin(), vec.end(), compare_entry);
}
NOT: Nawaz kodunu kullanmak için güncellendi compare_entry
uygulanması.
+1, Öne doğru. Ben de aynı şekilde düşündüm. Yine de OP'nin aynı çizgide düşünmesi şüphesiz. – iammilind
Harika, işe yaradı, teşekkürler! Eğer (e1.first == e2.first) kısmını unuttum, bu yüzden benim için başarısız oldu. – toastie
@Michael: "compary_entry" işlevinin başka bir uygulamasını ekledim. Umarım senin için iyidir. :-) +1 BTW. – Nawaz
Daha fazla detay verebilir misiniz? Hangi kriterleri istiyorsun? – iammilind
Daha fazla bilgi için –
İki farklı özelliği olan nesnelerin listesini sıralıyorum: mesafe ve önem. Bu özelliklerin bir karşılaştırması (daha yüksek önem) diğerini geçersiz kılar (daha yakın mesafe). Öyleyse, bir nesnenin itirazları 1 ve diğerinin 0 olması durumunda, mesafenin daha büyük olmasına rağmen, ikinci olandan daha yüksek sıralanacaktır. Sadece bir karşılaştırma yaparak bunu yapmanın bir yolunu anlayamıyorum. – toastie