質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

397閲覧

std::vector<glm::vec3>をソートしたい

Tololololo

総合スコア118

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2018/12/26 06:55

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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

yohhoy

総合スコア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
Tololololo

総合スコア118

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takabosoft

2018/12/26 07:45

多次元配列がどこにあるのか判りませんが、コンパイルエラーでしたらコードを提示してもらえば回答できたかもしれません。
guest

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
takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問