2015-10-27 9 views
5

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 ...; 
    } 
}; 
+1

[N3573: estensioni eterogenee per contenitori non ordinati] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3573.html) –

+1

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 –

risposta

2

Se si guarda il video Grill the committee da CppCon, spiegano il motivo per cui cose del genere questo accade: nessuno ha combattuto per esso.

Il C++ è standardizzato dalla commissione ma tale commissione richiede l'input dalla comunità. Qualcuno deve scrivere articoli, rispondere alle critiche, andare alle riunioni, ecc ... Quindi la funzione può essere votata. Il comitato non si limita a inventare la lingua e le funzionalità della biblioteca. Discute e vota solo su quelli che vengono portati avanti.

+1

Non so quale proposta abbia portato "is_transparent", ma avrei pensato che fosse un miglioramento relativamente piccolo della proposta includere i contenitori non ordinati. Mi chiedo perché questa domanda non è stata sollevata nel processo di revisione? –

+1

Quindi diresti che non esiste una ragione tecnica per cui questo non possa essere implementato, piuttosto che nessuno ha combattuto per questo? –

Problemi correlati