2016-05-20 19 views
0

Ich versuche, ein Paar mit einem Iterator aus einer Karte map <int, vertex> nodemap genannt zurückzukehren aber ich in einen Fehler leite die sagt: error: invalid operands to binary expression ('std::map<int, vertex>::iterator' (aka '__map_iterator<typename __base::iterator>') and 'int') std::pair<int, vertex> node = *(it + v);Ich versuche, eine Methode zu erstellen, die ein Paar mithilfe von Zeigerarithmetik zurückgibt, obwohl es einen Fehler gibt?

Unten ist mein Funktionscode:

std::pair<int, vertex> Graph::getMap(int v) 
{ 
    std::map <int, vertex>::iterator it = nodemap.begin(); 
    std::pair<int, vertex> node = *(it + v); 
    return node; 
} 

ich diesen Zeiger gehe davon aus Arithmetik ist möglich und eine Karte besteht aus Paaren, wie in dieser Stack Question erwähnt.

Vielen Dank für Ihre Hilfe!

+0

Suchen Sie das vth Element in der Karte oder für den Knoten mit Schlüssel v? – Jens

+0

Knoten mit Schlüssel v –

+0

Die Antwort von GWW. Holen Sie sich einfach das Element mit nodemap.find (v). std :: map ist ein assoziativer Container. – Jens

Antwort

1

std::map gibt eine bidirectional iterator zurück, die keine Addition unterstützt. Sie können std::advance(it, v); verwenden, aber ich bin mir nicht sicher, warum Sie so eine map::iterator inkrementieren möchten. Wenn Sie die vertex mit dem Schlüssel v abrufen möchten verwenden Sie:

std::map <int, vertex>::iterator it = nodemap.find(v); 
0

Der Fehler kommen aus dieser Zeile:

std::pair<int, vertex> node = *(it + v); 

std::map::iterator ist bidirectional das heißt, es ++ und -- auf sie verwenden können.

Um "iterator + intValue" zu verwenden, sollte der Iterator ein Random Access Iterator sein. Was ist nicht der Fall mit std::map