C++のstd::sortモジュールで二次元vectorをソートした時の結果がどうなるのか曖昧だったので、試してみた。
挙動は以下の2パターンのどちらかであると想定した。
- 第一要素を比較してソート、第一要素が等しい場合は第二要素を比較してソート、…
- 各vectorの第一要素のみを比較してソートする
次のような二次元vectorをソートしてみる。
要素0 | 要素1 | 要素2 | |
vector[0] | 6 | 2 | 4 |
vector[1] | 3 | 8 | 7 |
vector[2] | 6 | 2 | 1 |
vector[3] | 1 | 5 | 2 |
vector[4] | 3 | 1 | 1 |
このvectorをソートするソースコードは次のとおりである。
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
void printVector(const vector<vector<int>>& v) {
for (const auto& a : v) {
for (const auto& b : a) {
cout << b << " ";
}
cout << endl;
}
}
int main() {
vector<vector<int>> v = {
{6, 2, 4},
{3, 8, 7},
{6, 2, 1},
{1, 5, 2},
{3, 1, 1}
};
sort(v.begin(), v.end());
printVector(v);
/*
実行結果
1 5 2
3 1 1
3 8 7
6 2 1
6 2 4
*/
return 0;
}
結果は、
第一要素を比較してソート、第一要素が等しい場合は第二要素を比較してソート、…
であった。さすが標準ライブラリ、きれいにソートしてくれる。
要素0 | 要素1 | 要素2 | |
vector[0] | 1 | 5 | 2 |
vector[1] | 3 | 1 | 1 |
vector[2] | 3 | 8 | 7 |
vector[3] | 6 | 2 | 1 |
vector[4] | 6 | 2 | 4 |
また、要素なしと要素ありの比較は要素なしの方が小さいと判定される。そのため、仮に{{6,2,1},{6,2}}をソートした場合の結果は、{{6,2},{6,2,1}}となる。
コメント