c++ example beispiel - So finden Sie, ob ein bestimmter Schlüssel in einer C ++ std :: map existiert





5 Answers

Um zu überprüfen, ob ein bestimmter Schlüssel in der Zuordnung vorhanden ist, verwenden Sie die count auf eine der folgenden Arten:

m.count(key) > 0
m.count(key) == 1
m.count(key) != 0

Die documentation für map::find besagt: "Eine andere Elementfunktion, map::count , kann verwendet werden, um einfach zu prüfen, ob ein bestimmter Schlüssel existiert."

Die map::count für map::count lautet: "Da alle Elemente in einem Kartencontainer eindeutig sind, kann die Funktion nur 1 (wenn das Element gefunden wird) oder 0 (andernfalls) zurückgeben."

Um einen Wert aus der Karte über einen Schlüssel abzurufen, den Sie kennen, verwenden Sie map::at :

value = m.at(key)

Im Gegensatz zu map::operator[] map::at keinen neuen Schlüssel in der Map, wenn der angegebene Schlüssel nicht existiert.

dictionary insert hashmap

Ich versuche zu prüfen, ob ein bestimmter Schlüssel in einer Karte ist und etwas nicht kann:

typedef map<string,string>::iterator mi;
map<string, string> m;
m.insert(make_pair("f","++--"));
pair<mi,mi> p = m.equal_range("f");//I'm not sure if equal_range does what I want
cout << p.first;//I'm getting error here

Wie kann ich drucken, was in p ist?




m.find == m.end() // not found 

Wenn Sie eine andere API verwenden möchten, suchen Sie nach m.count(c)>0

 if (m.count("f")>0)
      cout << " is an element of m.\n";
    else 
      cout << " is not an element of m.\n";



template <typename T, typename Key>
bool key_exists(const T& container, const Key& key)
{
    return (container.find(key) != std::end(container));
}

Natürlich könnten Sie, wenn Sie schicker werden möchten, immer eine Funktion ausformulieren, die auch eine gefundene Funktion und eine nicht gefundene Funktion verwendet, etwa so:

template <typename T, typename Key, typename FoundFunction, typename NotFoundFunction>
void find_and_execute(const T& container, const Key& key, FoundFunction found_function, NotFoundFunction not_found_function)
{
    auto& it = container.find(key);
    if (it != std::end(container))
    {
        found_function(key, it->second);
    }
    else
    {
        not_found_function(key);
    }
}

Und benutze es so:

    std::map<int, int> some_map;
    find_and_execute(some_map, 1,
        [](int key, int value){ std::cout << "key " << key << " found, value: " << value << std::endl; },
        [](int key){ std::cout << "key " << key << " not found" << std::endl; });

Der Nachteil ist ein guter Name, "find_and_execute" ist peinlich und ich kann mir nichts Besseres einfallen lassen ...




map<string, string> m;

check key existiert oder nicht, und return number of tritt auf (0/1 in map):

int num = m.count("f");  
if (num>0) {    
    //found   
} else {  
    // not found  
}

check key exist oder nicht und return iterator:

map<string,string>::iterator mi = m.find("f");  
if(mi != m.end()) {  
    //found  
    //do something to mi.  
} else {  
    // not found  
}  

in Ihrer Frage, der Fehler durch die operator<< Überladung operator<< verursacht, weil p.first ist map<string, string> , können Sie es nicht ausdrucken. Versuche dies:

if(p.first != p.second) {
    cout << p.first->first << " " << p.first->second << endl;
}



map <int , char>::iterator itr;
    for(itr = MyMap.begin() ; itr!= MyMap.end() ; itr++)
    {
        if (itr->second == 'c')
        {
            cout<<itr->first<<endl;
        }
    }





Related