von std::find position zurueck bekommen statt iterator
-
heiho
wie der titel schon sagt
ich hab nen container welchen ich durchsuchen lass,
die informationen darin sind in einer bestimmten reihenfolge,
ich brauch nu nicht den inhalt sondern die position in dem container als wert
beispiel:std::vector<int> vIntList; vIntList.push_back(3); vIntList.push_back(6); vIntList.push_back(22); vIntList.push_back(5); std::vector<int>::iterator iterResult = std::find(vIntList.begin(), vIntList.end(), 22);iterResult zeigt nun auf die 22, aber ich brauch die informationen das es an position 3 ist.
bisher mach ich das mit einem schleifen durchlauf
beispiel:std::vector<int> vIntList; vIntList.push_back(3); vIntList.push_back(6); vIntList.push_back(22); vIntList.push_back(5); for(std::size_t i = 0; i < vIntList.size(); ++i) if(vIntList[i] == 22) return ++i;Was ich fragen wollte, gibts fuer dieses problem ein algorithmus aus der standardbibliothek ?
-
Jap:
size_t index = std::distance(vIntList.begin(), iterResult);
-
also
std::vector<int>::iterator iterResult = std::find(vIntList.begin(), vIntList.end(), 22); std::size_t iPos = std::distance(vIntList.begin(), iterResult) + 1;?
Ist das performanter als ein schleifendurchlauf?
-
Für vector<> auf jeden Fall, bei list<> oder set<> dürfte es gleich schnell sein.
(distance() verwendet für Random Access Iteratoren eine einfache Subtraktion, für Forward-und Bidirektionale Iteratoren eine Zählschleife)