假设我有一个顶点列表: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
上面说明的方式使用?或者我最好使用键值数据结构/实现我自己的冒泡排序?
你只是错过了顶点的捕获,一个简单&
的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