karşılaştırın kullanmaz fark ettim:Neden std :: map aşırı operatörü <<a href="http://www.cplusplus.com/reference/map/map/operators/">http://www.cplusplus.com/reference/map/map/operators/</a> itibaren
"Bildirimi bu operasyonların hiçbiri dikkate ya kabın iç karşılaştırma nesnesi alır, ancak türden (elemanlarını karşılaştırmak olduğunu value_type) doğrudan. " Compare
karşılaştırın nerede bu aşırı operatör "<" açıklamasında yılındaCompare
kullanmıyor yanistd::map template < class Key, // map::key_type class T, // map::mapped_type class Compare = less<Key>, // map::key_compare class Alloc = allocator<pair<const Key,T> > // map::allocator_type > class map;
(http://www.cplusplus.com/reference/map/map/ bakınız): Bir ikili Iki eleman anahtarını bağımsız değişkenleri olarak alır ve bir
bool
döndürür.a
fonksiyonu tanımlarınızı sipariş sıkı zayıf içindeb
kala kabul isecomp
bir nesne bu tip vea
veb
anahtar değerlerdir olduğu ifadecomp(a,b)
, gerçek döneceğiz. harita nesnesi hem refleksle karşılaştırarak (elemanlar konteyner içinde takip edip iki elemanın olmadığını tuşları eşdeğerdir sırasını belirlemek için bu ifadeyi kullanır: onlar!comp(a,b) && !comp(b,a))
eğer eşdeğer olan bir harita yok iki unsur konteyner eşdeğer olabilir. anahtarlar. Bu üye türümap::key_compare
olarak daha azını operatör(a<b)
. ad verilmiş uygulanması aynı veren bir işlev işaretçi veya bir işlev nesnesi (örnek için kurucu bakınız).less<T>
Bu varsayılan olabilir.
Tam anlamıyorum Dayan, neden sadece "<" operatöründe Compare
kullanın?
Belki de fikir <'kullanmalıydı <', ancak daha az tahmin yanıtı duymak isterim. – Angew
(gcc cinsinden), açıkça "lexicographical_compare" olarak adlandırıyorlar, neden görebildiğim kadarıyla karşılaştırma işlevini bu şekilde pervasızca yapmadıklarını anlamıyorum. Karşılaştırma işlevi isteğe bağlı olarak karmaşık olabilir ve bu durumda, yalnızca aynı konumdaki öğenin aynı olup olmadığı ile ilgilenir, bu nedenle daha basittir <<'daha verimli olabilir - ama tahmin edilebilir ... – Nim
@Nim "Compare" functor'ı yaydılarsa, davranış standartta belirtilen bir şeyden sapacaktı. – juanchopanza