2017-11-20 2 views
1

Ich habe eine C++ Map namens buttonValues, wie unten gezeigt.C++ Map erhält das erste Element, wenn das zweite Element X ist

map<int, int> buttonValues; 

Ich habe einige Daten in meine Karte wie unten gezeigt.

buttonValues.insert(std::pair<int, int>(0, 1)); 
buttonValues.insert(std::pair<int, int>(1, 3)); 
buttonValues.insert(std::pair<int, int>(2, 0)); 

Was ich tun möchte, ist die Suche nach Wert 0 in der zweiten Spalte und wenn 0 in der zweiten Spalte gefunden wird, wird der Wert in der ersten Spalte zurück. In diesem Beispiel ist der Wert Ich mag zurück würde zu 2. Bisher Ich glaube, ich für 0 in der zweiten Spalte mit diesen Kriterien durchsuche:

buttonValues.find(0)->second 

aber wie bekomme ich den Wert in dem ersten entsprechenden Säule?

Dank Calum

+1

Wie soll sich der Algorithmus verhalten, wenn er in '{{1,0}, {2,0}, {3,0}}' '' '' sucht? Bei der Suche nach "-1"? –

+0

Nichts würde gefunden werden. Dieser Code wird in eine if-Anweisung eingefügt, sobald dieses Problem gelöst ist, sodass die if-Anweisung einfach übergeben wird. –

Antwort

1

buttonValues.find(0)->second geben Sie den Wert ("2. Säule") 0 Taste entspricht. In Ihrem Beispiel wird 1 zurückgegeben. Sie müssen sich über die Landkarte iterieren und suchen nach Werten = 0 und dann den Schlüssel zurück:

for (const auto& keyval : buttonValues) // Look at each key-value pair 
{ 
    if (keyval.second == 0) // If the value is 0... 
    { 
     return keyval.first; // ...return the first element in the pair 
    } 
} 

du in Funktion setzen. Beachten Sie, dass eine Karte eindeutige Schlüssel, aber nicht unbedingt eindeutige Werte aufweist. Daher sollten Sie wahrscheinlich den Fall behandeln, in dem Sie mehrere Schlüssel mit dem Wert 0 haben.

+0

Funktioniert gut. Vielen Dank! –

1

Etwas wie folgt aus:

for (auto X : map_name) 
    if (X.second == 0) 
    return X.first; 

std::pair<> hält Werte der ersten und zweiten Spalten in Ihrer Karte. Sie können einfach alle Paare durchlaufen und die zweiten Werte nach Ihren Wünschen überprüfen.

0

Eigentlich aus Performance-Sicht ist es nicht ratsam, Schlüssel nach Wert aus einer Karte zu suchen, die Zeitkomplexität wäre lineare Zeit O(N). Wenn Sie Wert nach Schlüssel aus einer Karte suchen, wäre dies 'O (logN)'. Sie können überlegen, eine umgekehrte Karte oder multimap oder sogar unordered_map/unordered_multimap hängt von Ihrem Anwendungsfall zu bauen.

Verwandte Themen