Ben şu bilgileri içerir birden çok veri girişlerini vardır: ID_NUMBER isim1 tarih isim2C++ çiftli seçme verisi
Böyle bir yapı içine koymak mümkündür:
struct entry {
int id_number;
string name1;
int date;
string name2;
}
Verilerimde böyle girdilerim var ve sıralamak istiyorum. İlk olarak, alfabetik olarak name1'e göre sıralamak, sonra tarihe göre sıralamak istiyorum. Ancak, tarihe göre sıralama, alfabetik sıralamanın bir alt kümesidir. Aynı adla1 iki girişim varsa, o tarihlere göre bu girişleri sipariş etmek istiyorum. Ayrıca, sıraladığımda, girdinin öğelerinin birlikte kalmasını istiyorum, bu nedenle dört değerin tümü birlikte.
Sorularım şunlardır:
1) Ben bu yüzden bunlardan herhangi biri tarafından ne zaman sıralamak herhangi birlikte dört elementin dizi tutabilir bu verileri tutmak için kullanması gereken veri yapısı ne tür?
2) Bu sıralama işlemini yapmanın en hızlı yolu nedir (kodu yazmak için gereken süre cinsinden). İdeal olarak, önceden oluşturulduğu için, algoritms.h'deki gibi bir şey kullanmak istiyorum.
3) STL, verimli bir şekilde tanımladığım çifte sıralama işlemlerini gerçekleştirebilecek bir veri yapısına sahip mi?
Dengeli bir sıralama gerekiyor ya da bu işe yaramaz. Std :: stable_sort'un gerçekten çok yavaş olduğu ve başka bir birleştirme sıralama uygulamasının çok daha iyi olacağı, çünkü en iyi ve en kötü durum n log n iken neye benzeyeceğine dair ifadeler dışında, kendi yanıtımı vermekten vazgeçeceğim std :: stable_sort ... n log n^2 ya da bunun gibi aptal bir şey. Öyleyse, cevabını çoğunlukla, adrese güncellerim. Eğer yaparsan seni oylarım. Veya teori kendi cevabımla açıklayacağım ... –
@OrgnlDave: öyle değil. İki alana * ayrı ayrı * sıralarsanız, * yalnızca bir sabit * sıralama * gerekir. Örneğin, tarihe göre sıralama yaparsınız, daha sonra ada göre sıralanırsınız ve tarihlerin sırayla kalmasını istersiniz. Bu, her iki karşılaştırmayı da bir kerede yapıyor, bu yüzden tek bir sıralama (kararsız olabilir) hem isim hem de tarihe göre düzenler. –
Üzgünüz ama bu karşılaştırıcı kararlı bir sıralama sağlamayacaktır –