C++ 14 introduce Compare::is_transparent
per le operazioni equivalenti find in contenitori associativi.Perché non esiste un equivalente std :: is_transparent per i contenitori non ordinati?
template< class K > iterator find(const K& x);
template< class K > const_iterator find(const K& x) const;
trova un elemento con chiave che confronta equivalente al valore x. Questo sovraccarico partecipa alla risoluzione di sovraccarico solo se l'ID qualificata Compare :: is_transparent è valido e denota un tipo. Esso consente di chiamare questa funzione senza costruire un'istanza di Key
Poiché non v'è più un'istanza temporanea di Key
costruiti, questi possono essere più efficienti.
Non sembra essere un equivalente per i contenitori non ordinati.
Perché non c'è Compare::key_equal
/Compare::hash_equal
?
Immagino che sarebbe relativamente semplice consentire una ricerca efficiente, ad esempio, di stringhe letterali in contenitori non ordinati?
template<>
struct hash<string>
{
std::size_t operator()(const string& s) const
{
return ...;
}
// hash_equal=true allows hashing string literals
std::size_t operator()(const char* s) const
{
return ...;
}
};
[N3573: estensioni eterogenee per contenitori non ordinati] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3573.html) –
Penso che in caso di un non ordinato contenitore una chiave deve essere usata due volte (per l'hashing e un confronto di equivalenza), quindi l'inoltro perfetto (da cui i comparatori trasparenti traggono grande beneficio) potrebbe non essere la scelta migliore qui, sebbene [N3465] (http: //www.open- std.org/jtc1/sc22/wg21/docs/papers/2012/n3465.pdf) menziona i contenitori non ordinati –