C++
1std::vector<glm::vec3> a = { 2glm::vec3(1.0,1.0,1.0), 3glm::vec3(2.0,1.0,2.0)... 4}
こんな感じで入っている配列をvec3[0]とvec3[2]を基準に数値の低い順からソートしたいのですが、どうすればよいでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
動作環境が無いためを机上コードですが、下記でいかがでしょう。(<
/>
が逆かもしれません)
C++
1#include <algorithm> // sort 2#include <tuple> // tie 3 4std::vector<glm::vec3> a = { ... }; 5 6std::sort(a.begin(), a.end(), 7 [](const glm::vec3& lhs, const glm::vec3& rhs) { 8 // キー x, y の優先順で昇順ソート 9 return std::tie(lhs.x, lhs.z) < std::tie(rhs.x, rhs.z); 10 });
投稿2018/12/26 07:56
総合スコア6191
0
自己解決
ソート関数を自作して解決しました。
コードはこんな感じです。
もう少し簡略化できるところはできると思います。
C++
1 glm::vec3 tmp; 2 for ( unsigned int i=0; i<a.size(); ++i ) { 3 for ( unsigned int j=i+1; j<a.size(); ++j ) { 4 if (a[i].x > a[j].x) { 5 tmp = a[i]; 6 a[i] = a[j]; 7 a[j] = tmp; 8 } 9 if (a[i].z > a[j].z) { 10 tmp = a[i]; 11 a[i] = a[j]; 12 a[j] = tmp; 13 } 14 } 15 }
std::sortも使ってみたのですが、多次元配列の際添字の付け方などがうまくいかずコンパイルエラーを起こし続けたので断念しました。
投稿2018/12/26 07:39
編集2018/12/26 07:40総合スコア118
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
std::sort
関数を使ってください。
template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );
比較関数を自分でラムダなりで記述すればOKです。
構文が分からないのでしたら、以下を参考にしてください。
C++で構造体やクラスをソートする方法まとめ
https://qiita.com/arcslab123/items/7cd217cc5fafef700dff
投稿2018/12/26 07:30
編集2018/12/26 07:37総合スコア8356
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。