
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
#2
>そもそも2次元配列をソートしたいというのはどのような仕様でしょうか?
質問に
> dbVec[val][0].x のxを昇順にval列をソートしたいです。
とあるので、各ベクタの先頭要素のxをキーにするということだと思います。
で、#1の
>「そ~いう比較関数」を作ってやってください.
の指示に従って比較関数を作成すると、下に示すコードのようになります。
> 現実的な問題として, 本当に std::vector 同士を入れ替えたときにどのくらい時間がかかるかは知らんけど.
ソートが必要なら、配列の配列にするより配列のポインタ配列にしたほうがいいでしょうね。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct coordinate
{
int x;
int y;
};
// 比較関数
int compare(vector<coordinate>& a, vector<coordinate>& b)
{
return a[0].x < b[0].x;
}
// データの初期設定
void setup(vector< vector<coordinate> >& vec)
{
vector<coordinate> elements;
coordinateelement = { 0, 0 };
//[6, 5, 2]
element.x = 6;elements.push_back(element);
element.x = 5;elements.push_back(element);
element.x = 2;elements.push_back(element);
vec.push_back(elements);
//[4, 1, 9, 7],
elements.clear();
element.x = 4;elements.push_back(element);
element.x = 1;elements.push_back(element);
element.x = 9;elements.push_back(element);
element.x = 7;elements.push_back(element);
vec.push_back(elements);
//[8, 3]
elements.clear();
element.x = 8;elements.push_back(element);
element.x = 3;elements.push_back(element);
vec.push_back(elements);
}
// データの出力
void print(vector< vector<coordinate> >& vec)
{
for (vector< vector<coordinate> >::const_iterator i = vec.begin();
i != vec.end(); ++i)
for (vector<coordinate>::const_iterator j = i->begin();
j != i->end(); ++j)
cout << j->x << " ";
cout << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
vector< vector<coordinate> > dbVec;
setup(dbVec);
cout << "Before:" << endl;
print(dbVec);
sort(dbVec.begin(), dbVec.end(), compare);
cout << "After:" << endl;
print(dbVec);
}
No.3
- 回答日時:
ご回答いただいた例では仕様が分かりません。
[4, 1, 9, 7],
[6, 5, 2],
[8, 3]
ということですが、これではdbVecの要素数が多い順にソートしているようにしか見えず、
「xを昇順に」
と矛盾しています。
例示ではなく、どのような仕様でソートしたいのか、説明できますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
C# DataGridView のヘッダーセ...
-
リスト構造のソートで悩んでま...
-
配列の問題
-
昇順と降順
-
クイックソート
-
VB.NETでファイル名順にファイ...
-
(VBA) Dir 関数で取得するファ...
-
VBA基本構文の作り方 2列の...
-
C# DataTableの行をソートしてD...
-
VB.net データセットからのCSV...
-
C++ 入力した3つのint型の整数...
-
文字列をソートする方法
-
C言語について
-
スプレッドでのソート
-
DataGridViewの複数列を連動し...
-
CStringからchar*への型変換に...
-
C言語 配列の長さの上限
-
関数から配列を返すには?
-
VBAのプログラムで、DIAG = 1# ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
C# DataGridView のヘッダーセ...
-
VB.NETでファイル名順にファイ...
-
C# DataTableの行をソートしてD...
-
C言語・要素除去
-
配列の問題
-
VBA基本構文の作り方 2列の...
-
あるディレクトリ内のファイル...
-
Excelですべての組合せ(重複組...
-
n番目に大きい数を求めるアル...
-
2次元配列を複数項目でソートし...
-
ファイル名「1.jpg ~10.jpg~...
-
クイックソートしながら重複要...
-
C# ArrayListを二次元配列のよ...
-
csvファイル内にてソートす...
-
C言語について
-
昇順ソート
-
int num[10]という配列に、適当...
-
EXCEL VBAのソートについて
-
excel VBA の条件をつけての列...
おすすめ情報