2017-12-19 3 views
0

Ich bekomme immer diesen Fehler.C++ suche ein Tupel in map error: kann 'int' lvalue nicht an 'int &&' binden

#include <bits/stdc++.h> 
using namespace std; 
#define mt make_tuple<int,int> 

int main(){ 
    map<tuple<int,int>,int> l; 
    l[mt(5,4)] = 3; 
    cout << l.count(mt(9,8)); 
} 

1. Was soll ich ändern Werte aus meiner Datei zu akzeptieren?
2. Wo ist der Fehler?

int main(){ 
    map<tuple<int,int>,int> l; 
    l[mt(5,4)] = 3; 
    int a,b; 
    cin >> a >> b; 
    cout << l.count(mt(a,b)); 
} 
+9

Die ersten drei Zeilen im Code Probe enthalten genug schlechte Praktiken mehrere Stellen zu besetzen. Ich schlage vor, Sie verlernen diese wettbewerbsfähige Programmierung gelehrt BS und schnell. – StoryTeller

Antwort

3

Der ganze Sinn der make_tuple ist mit ihm der Typ für Sie die Tupel ableiten. Wenn Sie es explizit unter Angabe von <int, int> aufrufen, verhindern Sie, dass der Abzug korrekt ausgeführt wird.

Lassen Sie einfach make_tuple seine Arbeit machen und Makros nicht definieren, nur weil Sie ein paar Tastenanschläge speichern möchten - Sie werden es bereuen.

int main(){ 
    std::map<std::tuple<int, int>, int> l; 
    l[std::make_tuple(5,4)] = 3; 
    int a,b; 
    cin >> a >> b; 
    cout << l.count(std::make_tuple(a,b)); 
} 

live example on wandbox.org

+0

Ja, es funktioniert. Vielen Dank – Shadow

Verwandte Themen