2017-05-28 3 views
0

Sortierung habe ich die folgende Vektor erklärt:einen 3D-Vektor von Paaren C++

std::vector<std::vector<std::vector<std::pair<float, int>>>> depth; 

ich die Paare in jedem Vektor in aufsteigender Reihenfolge nach ihrem ersten Elemente sortieren möge.

Sortierung:

for(std::vector<std::vector<std::pair<float,int>>> vec1 : depth) { 
    for(std::vector<std::pair<float,int>> vec2 : vec1) { 
     std::sort(vec2.begin(), vec2.end()); 
    } 
} 

Und dann Druck:

for (std::vector<std::vector<std::pair<float,int>>> vec1 : depth) { 
    for (std::vector<std::pair<float, int>> vec2 : vec1) { 
     if(!vec2.empty() && (vec2.size() > 1)) { 
      for (std::pair<float, int> pr : vec2) { 
       std::cout << pr.first << " " << pr.second << " "; 
      } 
      std::cout << std::endl; 
     } 
    } 
} 

Ein Teil des Ergebnisses:

4.65514 1 3.10343 2 
4.67043 1 3.11362 2 
4.68594 1 3.12396 2 

Wie es sein sollte:

3.10343 2 4.65514 1 
3.11362 2 4.67043 1 
3.12396 2 4.68594 1 

Jede Hilfe wird geschätzt, da mir wirklich die Dinge ausgingen, um zu versuchen, und ich kann nicht herausfinden, was ich falsch mache.

+1

Sie Sortier Kopien. Tippfehler. – LogicStuff

+1

Sortierung mithilfe von Referenzen 'std :: vector >> & vec1' – Galik

Antwort

1

Wie LogiStuff in den Kommentaren sagte, sortieren Sie Kopien. Dies liegt daran, dass Sie die for-range verwenden, indem Sie eine Iterationsvariable erstellen, die aus jedem Element des Bereichs erstellt wird.

Um dies zu lösen, müssen Sie nur eine & hinzufügen, um über den Bereich als Referenz zu iterieren, so dass der Vektor an Ort und Stelle sortiert ist. Noch besser ist, verwenden auto einen Schritt nach vorn in Richtung moderner C++ zu bewegen:

for(auto &vec1 : depth) { 
    for(auto &vec2 : vec1) { 
    std::sort(vec2.begin(), vec2.end()); 
    } 
} 

Hier die online demo

Verwandte Themen