私のコードでは多次元配列のベクトルを得ました。このベクトルには、輪郭の点の座標が格納されています。ポイントに基づいて輪郭を復元する前に、データを減らすために複製を消去する必要があります。ベクトルがソートされている場合、std::unique
を使用できることがわかりました。しかし、並べ替えは必要ないので、ソートされていないベクトルから重複を削除したい。 'std::pair<_Ty1,_Ty2> std::set<_Kty>::insert(double &&) : cannot convert parameter 1 from std::array<_Ty,_Size> to 'double &&'
:だから、私は、このエラーメッセージが表示されますstd::set<double> set(matrix.begin(), matrix.end());
重複2倍の配列のソートされていないベクトルから重複を取り除く
std::vector<std::array<double, 3>> matrix;
rows = 2*lss.size();
matrix.resize(rows);
int j=0;
for(size_t i = 0;i<lss.size();i++) {
int k = j+1;
matrix[j][0]=lss[i].v[0].x;
matrix[j][1]=lss[i].v[0].y;
matrix[j][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;
j=j+2;
}
std::set<double> set(matrix.begin(), matrix.end());
matrix.erase(std::remove_if(matrix.begin(), matrix.end(), [&set] (double item) {return !set.erase(item); }), matrix.end());
しかし、ラインのを取り除くためにstd::set
を使用する必要があります。次の行のために
私はまた、エラーメッセージが表示されます、あなたは行列のセットを構築している
std::set<std::array<double, 3>> set(matrix.begin(), matrix.end());
:'bool export::<lambda_c894aac2078f37151750793b2c6d0417>::operator()(double) const' : cannot convert parameter 1 from 'std::array<_Ty,_Size>' to 'double'
'のstd ::設定セット()'ダブルスを期待::配列それに。 –
重複を避けたいのであれば、最初にポイントをベクターに保存するのはなぜですか?それは特定の要件を満たすことですか? – Rerito
セットにプッシュしてテールを消去することは、最初にソートして一意の値を見つけることとほとんど同じです。 –