2014-01-26 29 views
0

假設我有一個頂點列表:std::vector<vec3> vertices,以及一系列索引:std::vector<unsigned int>。然後,我想用std::sort對這些索引進行排序,而不是基於索引的大小,而是基於它們指向的頂點座標。這就是我的意思:基於其他信息的C++排序索引

std::sort(indices.begin(), indices.end(), 
     [](unsigned int indexA, unsigned int indexB) { 
      return vertices[indexA].x < vertices[indexB].x; 
     }); 

在一個完美的世界中,以下將根據指向頂點的x座標對索引進行排序。但是,這不是lambda函數的工作方式,我無法訪問vertices信息。

有沒有辦法使用std::sort以上述方式?或者我最好使用鍵值數據結構/實現我自己的冒泡排序?

+6

你不只是需要捕獲'vertices'? – jrok

回答

5

你只是錯過了捕獲頂點,簡單的&在lambda的捕獲部分。

std::sort(indices.begin(), indices.end(), 
    [&](unsigned int indexA, unsigned int indexB) { 
     return vertices[indexA].x < vertices[indexB].x; 
    }); 

這是如何工作的:http://en.cppreference.com/w/cpp/language/lambda

+0

突然之間,lambda函數似乎更有用......謝謝! – Fault