说我有一个顶点列表: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
?或者我最好使用键值数据结构/实现我自己的冒泡排序?
答案 0 :(得分:5)
你只是错过了顶点的捕获,在lambda的捕获部分中是一个简单的&
。
std::sort(indices.begin(), indices.end(),
[&](unsigned int indexA, unsigned int indexB) {
return vertices[indexA].x < vertices[indexB].x;
});