Estou usando muito std::set<int>
e, frequentemente, só preciso verificar se esse conjunto contém um número ou não.
Acho natural escrever:
if (myset.contains(number))
...
Mas, devido à falta de um contains
membro, preciso escrever o incômodo:
if (myset.find(number) != myset.end())
..
ou não tão óbvio:
if (myset.count(element) > 0)
..
Existe uma razão para esta decisão de design?
count()
abordagem é que ela faz mais trabalho do que countains()
deveria.
contains()
que retorna um bool
iria perder informações valiosas sobre onde o elemento está na coleção . find()
preserva e retorna essas informações na forma de um iterador, portanto, é a melhor escolha para uma biblioteca genérica como a STL. (Isso não quer dizer que um bool contains()
não seja muito bom de se ter ou mesmo necessário.)
contains(set, element)
função gratuita usando a interface pública do conjunto. Portanto, a interface do conjunto é funcionalmente completa; adicionar um método de conveniência apenas aumenta a interface sem habilitar nenhuma função adicional, o que não é o método C ++.