Az önce bazı tavsiyeler okudum
std::string s = get_string();
std::string t = another_string();
if( !s.compare(t) )
{
yerine
if( s == t )
{
Ben neredeyse her zaman sonuncusunu kullanıyorum çünkü buna alışkınım ve daha doğal, daha okunabilir geliyor. Ayrı bir karşılaştırma fonksiyonu olduğunu bile bilmiyordum. Daha doğrusu, == fonksiyonunun compare() fonksiyonunu çağıracağını sanıyordum.
**Farklar nelerdir? Hangi bağlamlarda bir yol diğerine tercih edilmelidir?
Yalnızca bir dizenin başka bir dizeyle aynı değer olup olmadığını bilmem gereken durumları göz önünde bulunduruyorum.
std::string::compare() bir int
döndürür:
s
ve t
eşitse sıfıra eşittir,nin
t`den küçük olması durumunda sıfırdan küçüktür,nin
t`den büyük olması durumunda sıfırdan büyüktür.İlk kod parçacığınızın ikincisine eşdeğer olmasını istiyorsanız, aslında şöyle okumalısınız:
if (!s.compare(t)) {
// 's' and 't' are equal.
}
Eşitlik işleci yalnızca eşitliği test eder (bu nedenle adı) ve bir bool
döndürür.
Kullanım durumlarını detaylandırmak gerekirse, compare()
, iki dizginin farklı olduklarında birbirleriyle nasıl ilişkili olduklarıyla (daha az veya daha büyük) ilgileniyorsanız yararlı olabilir. PlasmaHH haklı olarak ağaçlardan bahseder ve aynı zamanda, örneğin, kabı sıralı tutmayı amaçlayan bir dize ekleme algoritması, yukarıda bahsedilen kap için bir dikotomik arama algoritması vb. olabilir.
EDIT: Steve Jessop'un yorumlarda belirttiği gibi, compare()
en çok hızlı sıralama ve ikili arama algoritmaları için kullanışlıdır. Doğal sıralamalar ve ikili aramalar sadece std::less ile uygulanabilir.