Nasıl verimli bir şekilde C 11 Standart Kütüphane bir kap tercih edebilir miyim?
İyi bilinen bir imaj var, adı "C Kap seçimi". Bir akış şeması istedi kullanımı için en iyi kap seçin.
Kimse yok mu zaten C 11 versiyonu varsa biliyor mu?
Bir önceki de bu:

CEVAP
Bildiğim kadarıyla, ancak yapılabilir sözel olarak değil sanırım. Ayrıca, grafik list genel olarak çok iyi bir kapsayıcı olmadığından biraz kapalı, ve de forward_list; Her iki listede niş uygulamaları için çok özel kaplar vardır.
Böyle bir grafik oluşturmak için, sadece iki basit kurallar gerekir:
- Anlambilim ilk seçim
- Çeşitli seçenekleri mevcut olduğunda, en basit
Performans ilk başta genellikle işe yaramaz endişesi, büyük O sadece bir kaç bin (veya daha fazla) öğe işleme başlattığınızda devreye.
Konteynerlerin iki büyük kategoriye ayrılır:
- İlişkilendirilebilirkaplar:
findbir operasyon var - Basit Bir Dizikaplar
ve o zaman bunların üzerine birkaç adaptörleri inşa edebilirsiniz: , *, *5stackqueue. Adaptörleri burada bırakıyorum, yeterince tanınabilir uzman.
Soru 1:İlişkilendirilebilir?
- Kolayca aramak gerekiyorsabiranahtar, çağrışımsal konteyner gerekir
- Eğer öğeleri sıralanmış olması gerekiyorsa, o zaman sipariş ilişkilendirilebilir bir kapsayıcı gerekir
- Aksi takdirde, soru 2 için Atlama.
Soru 1.1:Emretti?
- Eğer belirli bir düzen varsa, kullanın
unordered_konteyner, aksi takdirde geleneksel sipariş muadili kullanın.
Soru 1.2:Ayrı Bir Anahtar?
- Eğer anahtar değeri ayrıdır, ** 7, aksi takdirde kullanım
setkullanın
Soru 1.3:Çoğaltır?
- Eğer çiftleri tutmak istiyorsanız,
multi, başka bir kullanın.
Örnek:
Benzersiz bir KİMLİĞİ onlarla ilişkili olan birkaç kişi var varsayalım, ve onun KİMLİĞİ bir kişi veri almak için sadece mümkün olduğunca istiyorum.
findbir işlevi, böylece ilişkilendirilebilir bir kapsayıcı istiyorum1.1. Daha az sipariş,
unordered_bir konteyner böylece beni zerre kadar ilgilendirmiyor1.2. Benim anahtar (ID)
mapbir böylece ile ilişkilidir değeri ayrıdır1.3. KİMLİĞİ Ankara'da sürünme gerekir, böylece benzersizdir.
Son cevap: std::unordered_map<ID, PersonData>.
Soru 2:Bellek kararlı?
- Eğer öğeleri bellek (, konteynırın değiştirildiğinde hareket değil yani) istikrarlı olmalıdır, o zaman
listbazı kullanın - Aksi takdirde, söz konusu 3 atlamak.
Soru 2.1:Hangi?
list;forward_listbir küçük bellek ayak izi için faydalı olur razı.
Soru 3:Dinamik olarak bulunur?
- Eğer konteyner bilinen bir boyutu (derleme zamanında)vebu boyutta bir program sırasında değişmiş olacakveöğeleri varsayılan constructibleyatam başlatma listesi (
{ ... }sözdizimini kullanarak) sağlamak,arraybir kullanabilirsiniz. C-dizisi geleneksel, ama kullanışlı fonksiyonlar ile değiştirir. - Aksi halde, söz konusu 4 atlamak.
Soru 4:Çift uçlu?
- Eğer hem önde hem de arkada öğeleri kaldırmak mümkün olmak istiyorsanız, o zaman ** 19, aksi takdirde
vectorBir, bir.
İlişkilendirilebilir bir kapsayıcı ihtiyacın yoksa, varsayılan olarak, seçtiğiniz vector unutmayın.

Nasıl SQL bir ayın ilk günü tercih ede...
Nasıl dll (STL) Standart Kütüphane sın...
Nasıl bir dize başka bir dize içeriyor...
Nasıl verimli bir şekilde anahtarları/...
Nasıl uyumlu hafıza sadece standart kü...