基于其他信息的C++排序索引

Fau*_*ult 0 c++ sorting c++11

假设我有一个顶点列表:std::vector<vec3> vertices和索引列表:std::vector<unsigned int>.然后,我想要根据索引std::sort的大小,但不是基于它们指向的顶点坐标来对这些索引进行排序.这就是我的意思:

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

在一个完美的世界中,以下内容将根据指向的顶点的x坐标对索引进行排序.但是,这不是lambda函数的工作方式,我无法访问这些vertices信息.

有没有办法以std::sort上面说明的方式使用?或者我最好使用键值数据结构/实现我自己的冒泡排序?

gal*_*p1n 5

你只是错过了顶点的捕获,一个简单&的lambda捕获部分.

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

它的工作原理如下:http://en.cppreference.com/w/cpp/language/lambda