'çiftleri silmek için en etkili yolu nedir ve vektör tür?
Elementlerin potansiyel bir sürü ile C vektörü al, çiftleri silmek, ve bir bakıma ihtiyacım var.
Ben şu anda aşağıdaki kodu var, ama işe yaramıyor.
vec.erase(
std::unique(vec.begin(), vec.end()),
vec.end());
std::sort(vec.begin(), vec.end());
Nasıl düzgün bunu yapmak için?
Belirtilmesi gerekmez ilk (yukarıda kodlu benzer) silmek veya sıralama ilk gerçekleştirmek için daha hızlı oluyor ayrıca? Eğer bu tür bir ilk gerçekleştirmek yaparsam, std::unique
idam sonra sıralanmış kalma garantisi var mı?
Ya da tüm bunları yapmak (belki daha fazla) etkili başka bir yolu var mı?
CEVAP
R. Pate Todd Gardner; std::set
Bu iyi bir fikir olabilir katılıyorum. Eğer vektörleri kullanarak kalırsan bile, eğer yeterince çiftleri varsa, kirli işler yapmak için bir set oluşturmak daha iyi olabilir.
Hadi üç yaklaşım karşılaştırın:
Sadece vektör kullanarak, benzersiz bir tür
sort( vec.begin(), vec.end() );
vec.erase( unique( vec.begin(), vec.end() ), vec.end() );
Ayarlamak için (elle) dönüştürme
set<int> s;
unsigned size = vec.size();
for( unsigned i = 0; i < size; i ) s.insert( vec[i] );
vec.assign( s.begin(), s.end() );
Ayarlamak için (bir kurucu kullanarak) dönüştürmek
set<int> s( vec.begin(), vec.end() );
vec.assign( s.begin(), s.end() );
Bu yineleme sayısı değiştikçe gerçekleştirin:
Özet: yineleme sayısı yeterince büyük olduğundaaslında bir dizi dönüştürmek için daha hızlı veriyi bir vektör içine dökümü.
Ve nedense, set dönüşüm yaparken elle kullanılan daha hızlı en azından oyuncak rastgele veri seti oluşturucu kullanarak daha gibi görünüyor.
Bir nesneyi klonlamak için en etkili y...
HTML elemanları jQuery kullanarak oluş...
Bir std başlatmak için en kolay yolu n...
Bir veritabanında etiketleri saklamak ...
Üzerinden pandalar ile dataframes döng...