example - map:: insert c++




Il controllo del valore esiste in una std:: map-C++ (6)

Che ne dici di utilizzare un'altra mappa internamente che memorizza valore, combinazione di tasti. Quindi posso chiamare find su di esso?

Sì: mantieni due mappe, con una mappa usando un tipo di chiave e l'altra usando l'altra.

Find () in std :: map esegue la ricerca sequenziale?

No è una ricerca binaria di un albero ordinato: la sua velocità è O (log (n)).

So che il metodo find trova la chiave fornita in std :: map e restituisce un iteratore all'elemento. Esiste comunque la possibilità di trovare il valore e ottenere un iteratore per l'elemento? Quello che devo fare è controllare che il valore specificato esista in std :: map. Ho fatto questo girando tutti gli elementi nella mappa e confrontando. Ma volevo sapere se esiste un approccio migliore per questo.

Ecco cosa ho scritto

bool ContainsValue(Type_ value)
{
    bool found = false;
    Map_::iterator it = internalMap.begin(); // internalMap is std::map
    while(it != internalMap.end())
    {
        found = (it->second == value);
        if(found)
            break;
        ++it;
    }
    return found;
}

modificare

Che ne dici di utilizzare un'altra mappa internamente che memorizza valore, combinazione di tasti. Quindi posso chiamare find su di esso? Find () in std :: map esegue la ricerca sequenziale?

Grazie




Possibile che io non comprenda appieno ciò che stai cercando di realizzare. Ma per verificare semplicemente se una mappa contiene o meno un valore, credo che si possa usare la find integrata di std::map .

bool ContainsValue(Type_ value)
{
    return (internalMap.find(value) != internalMap.end());
}

Quello che stai richiedendo è esattamente ciò che std :: find fa (non la funzione membro)

template< class InputIt, class T >
InputIt find( InputIt first, InputIt last, const T& value );

Non è la soluzione migliore ma potrebbe essere utile in alcuni casi in cui l'utente sta assegnando un valore predefinito come 0 o NULL all'inizializzazione.

Ex.
< int , string >
< string , int > 
< string , string > 

consider < string , string >
mymap["1st"]="first";
mymap["second"]="";
for (std::map<string,string>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
{
       if ( it->second =="" ) 
            continue;
}






stdmap