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

  • Chriselle Lim

    Chriselle Li

    26 Ocak 2008
  • Klemens Torggler

    Klemens Torg

    11 Mart 2008
  • ThisWeekYT

    ThisWeekYT

    14 Mart 2013