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

时间:2014-01-26 13:11:43

标签: 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;
        });

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

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

1 个答案:

答案 0 :(得分: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