- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试按多列对 vector 进行排序。所以这是我的 vector ,其中行是行数。因为我在不同大小的 for 循环中使用 vector ,所以它必须是动态的。
vector<vector<double> > matrix;
matrix.resize(rows);
for(size_t i=0; i<rows; i++) {
matrix[i].resize(3);
}
设置 vector 后,我用数据填充它。数据由坐标(xyz)组成。
for(size_t i = 0;i<lss.size();i+2) {
int k = i+1;
matrix[i][0]=lss[i].v[0].x;
matrix[i][1]=lss[i].v[0].y;
matrix[i][2]=lss[i].v[0].z;
matrix[k][0]=lss[i].v[1].x;
matrix[k][1]=lss[i].v[1].y;
matrix[k][2]lss[i].v[1].z;
}
目前一切正常。但接下来我必须对 vector 进行排序。我从我的数据中了解到,对于一个循环 channel ,z 坐标始终相同。所以我必须先按 vector 排序,而不是按第二列排序。我已经在搜索排序函数,比如 std:sort,我找不到合适的东西。我的尝试是这样的:
int compare(vector<double>& s1, vector<double>& s2)
{
return s1[0] < s2[0];
}
std::sort(matrix.begin(), matrix.end(), compare);
但是结果和输入的一样。
所以未排序的输出看起来像这样:
X=-5.000000, Y=2.000000, Z=-2.000000
X=-5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
X=-5.000000, Y=5.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=-5.000000, Y=-5.000000, Z=-2.000000
我想要的是:
X=-5.000000, Y=-5.000000, Z=-2.000000
X=-5.000000, Y=-5.000000, Z=-2.000000
X=-5.000000, Y=2.000000, Z=-2.000000
X=-5.000000, Y=5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
最佳答案
由于您要根据前两列进行排序,比较函数需要使用这两个值。此外,将 compare
的返回类型更改为 bool
以及 const&
的参数类型。
bool compare(vector<double> const& s1, vector<double> const& s2)
{
// If the values of the first column are not equal,
// just use them to order s1 and s2.
if ( s1[0] != s2[0] )
{
return s1[0] < s2[0];
}
// If the values of the first column are equal,
// use the values of the second column to order s1 and s2.
return s1[1] < s2[1];
}
关于c++ - 按多列对 Vecor 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37037776/
我正在尝试按多列对 vector 进行排序。所以这是我的 vector ,其中行是行数。因为我在不同大小的 for 循环中使用 vector ,所以它必须是动态的。 vector > matrix;
我在下面的小程序中遇到了以下错误: #include #include using namespace std; int main() { vector t; t.push_bac
所以我有一个半工作程序,我使用 读取用户输入 getline(std::cin, userinput, '\n') 然后我将输入发送到 std::vector subStrs分解用户的输入,使每个命令
我是一名优秀的程序员,十分优秀!