2016-04-12 14 views
0

Bir sorun yaşıyorum ve bu görevi yerine getirmem gerekiyor.Verilen durum için hangi konteyner kullanılır?

I

(i) çifti (set) gibi sadece bir kez ilave edilen bu şekilde çift (p1, Q1), (p2, q2) .. (pn, qn) ekleyin istiyoruz.
(ii) Her çifti set.For eski eklenir kaç sefer saymak saklamak: (7,2) çifti sadece bir kez ayarlanabilir içinde mevcut ama 3 kere eklerseniz edecektir 3.

Hangi konteyner sayar Bu sorun C++ 'da etkili midir?

Küçük örnek harika olacak!

Lütfen sorunumu anlayamıyor ve kötü İngilizce için üzgünüz diye sorun.

+0

Vektöre bir göz atmalısınız. [Bu bağlantıyı kontrol edin] (http://stackoverflow.com/questions/1041620/whats-the-most-efficient-way-to-erase-duplicates-and-sort-a-vector) – Matriac

+0

Anahtarlı bir hashmap kullanın. tuple ve eklemiş olduğunuz kat sayısı. – lobo

+2

['std :: map'] (http://en.cppreference.com/w/cpp/container/map) veya [' std :: unordered_map'] 'a (http: //) bakmak isteyebilirsiniz. en.cppreference.com/w/cpp/container/unordered_map). – Lingxi

cevap

4

std::map<Key, Value>, çiftlerinizi (Anahtar) sayılarını eşleştirecek şekilde ve eklediğinizde, bir sayacı artırma (Değer) hakkında ne dersiniz? henüz yoksa bu kod

using pairs_to_count = std::map<std::pair<T1, T2>, size_t>; 

std::pair<T1, T2> p1 = // some value; 
std::pair<T1, T2> p2 = // some other value; 

pairs_to_count[p1]++; 
pairs_to_count[p1]++; 

pairs_to_count[p2]++; 
pairs_to_count[p2]++; 
pairs_to_count[p2]++; 

, operator[] otomatik haritasında bir anahtar ekleyecektir. O anda, anahtarın karşılık gelen değerini sıfırlayacak. Ama ekledikçe, ilk kez bile, bu değer artar.

İlk yerleştirmeden sonra, 1 sayısı doğru olarak ekleme sayısını yansıtır. Daha fazla eklediğinizde bu değer artar. Daha sonra, sayımın alınması, belirli bir anahtarla ilişkili değer elde etmek için operator[] numaralı telefonu tekrar arama meselesidir.

size_t const p2_count = pairs_to_count[p2]; // equals 3 
İlgili konular