2010-12-03 16 views

Respuesta

14

count es parte de la associative container requirements(1).

Se requiere que cada contenedor asociativo lo proporcione como parte de su interfaz, incluso si el resultado es siempre cero o uno como es el caso con std::set.


(1) Este es un enlace a la documentación de SGI STL que describe el concepto de contenedor asociativo; el concepto tal como se define en el estándar C++ puede diferir ligeramente, pero no sustancialmente.

+0

Hmm ... un requisito obligatorio para un propósito no funcional. Podrían haberlo implementado con un cuerpo vacío para establecer. Extraño ... – Nav

+2

@Nav: No se puede implementar con un cuerpo vacío para 'std :: set' porque debe probar si el elemento existe en el conjunto. Sin embargo, podría implementarse en términos de 'std :: set :: find', (' return find (k)! = End()? 1: 0; '). No es absurdo; incluso para 'std :: set' te dice cuántos elementos con la clave dada existen en el contenedor; simplemente sucede que para 'std :: set', la respuesta es siempre cero o uno. –

+1

Merece la pena señalar que al tener más elementos en común en la interfaz, es más fácil escribir algoritmos de nivel superior que puedan funcionar con cualquiera de los contenedores, y más fácil cambiar el código de codificación de un contenedor para usar otro. Sin embargo, solo tiene sentido cuando las operaciones son semánticamente similares, razón por la cual STL no se desvive por hacer que las diferentes interfaces de los contenedores sean similares. –

Cuestiones relacionadas