2010-08-10 5 views
175

Olası Çoğalt: Bir std :: konteyner şey varsa kontrol etmenizi sağlayan <algorithm> şey
How to find an item in a std::vector?std :: vektörünün belirli bir nesne içerip içermediğini kontrol edin.

var mı? Ya da, bir yol, örneğin bir tane yapmak: Bu anahtarları kullandığından

if(a.x == b.x && a.y == b.y) 
return true; 

return false; 

bu sadece std::map ile yapılabilir?

Teşekkür

+6

std :: find ...... – sje397

+0

Belirli bir şey içeriyorsa veya boş değil mi? –

+2

Hangi C++ referansını kullanıyorsunuz? Ve başlık ' 'olarak adlandırılır. –

cevap

355

Denetleme:

if(!v.empty()){ 
    /* v is non-empty */ 
} else { 
    /* v is empty */ 
} 
+13

Eğer x son öğe v ise? –

+52

David, son(), son öğeyi geçtiğine işaret eder, böylece her şey çalışır. –

+2

Bu, vektörde bir çiftin olup olmadığını belirlemeye çalışırken sayısal tolerans içindir mi? –

73

bir unsuru aramaya önemliyse, ben tavsiye ederim: v elemanları (boş olmayan) içeriyorsa

#include <algorithm> 

if(std::find(v.begin(), v.end(), x) != v.end()) { 
    /* v contains x */ 
} else { 
    /* v does not contain x */ 
} 

denetleniyor std::vector yerine std::set. (. Yani myset.find(x)): Bu Kullanma O (n) zamanında

std::find(vec.begin(), vec.end(), x) ishal, ancak kendi find() üyesi std::set vardır O'da çalıştığı zaman (n log) - bu çok daha verimli elemanlar, çok sayıda var

std::set ayrıca, eklenen tüm öğelerin benzersiz olduğunu garanti eder, böylece if not contained then push_back()... gibi bir şey yapmak zorunda kalmazsınız.

+1

Harika !!! Ben bir lexer yazıyorum. Setler vektörlerden çok daha iyi olacak. '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Ayrıca elemanın indeksini bir sette de elde edebilmek istiyorum. – IAbstract

+1

Mükemmel bilgi! Düz soruya cevap verdiğinizde ve ek bir çözüm sunduğunuz için teşekkür ederiz. – CodeMouse92

+3

Bu, kötü bir öneridir. Performans önemli ise, profil. Karmaşıklık analizinin, kendi özel probleminiz hakkında söyleyecek her şeyin bir garantisi yoktur. –