SORU
25 HAZİRAN 2009, PERŞEMBE


'ç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
25 HAZİRAN 2009, PERŞEMBE


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:

comparison of vector and set approaches

Ö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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • adrianisen

    adrianisen

    25 Kasım 2009
  • Damien Hayes

    Damien Hayes

    11 Mart 2008
  • lilstevie89

    lilstevie89

    25 Mart 2011