【C++】二次元vectorのsort結果

C++

C++のstd::sortモジュールで二次元vectorをソートした時の結果がどうなるのか曖昧だったので、試してみた。
挙動は以下の2パターンのどちらかであると想定した。

  • 第一要素を比較してソート、第一要素が等しい場合は第二要素を比較してソート、…
  • 各vectorの第一要素のみを比較してソートする

次のような二次元vectorをソートしてみる。

要素0要素1要素2
vector[0]624
vector[1]387
vector[2]621
vector[3]152
vector[4]311
ソート前の二次元vector

この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]152
vector[1]311
vector[2]387
vector[3]621
vector[4]624
ソート後の二次元vector

また、要素なしと要素ありの比較は要素なしの方が小さいと判定される。そのため、仮に{{6,2,1},{6,2}}をソートした場合の結果は、{{6,2},{6,2,1}}となる。

コメント

タイトルとURLをコピーしました