C++でのベクトルのソート

イントロダクション

このチュートリアルでは、C++でベクトルをソートすることに焦点を当てます。

ソートは、どのプログラミング言語でも広く実行される操作の一つです。同様に、C++でも、様々なアルゴリズムを使ってさまざまなデータ構造をソートすることができます。

ベクトルについては、特に、ソート操作を任意の順序(昇順または降順)で実行することができます。

C++でベクトルを昇順に並べ替える

C++のvectorは、アルゴリズムのヘッダーファイルに定義されたsort()関数を使用することで、簡単に昇順でソートすることができます。

sort関数は、与えられたデータ構造を並べ替え、返り値はありません。並べ替えは、渡された2つのイテレータまたは位置の間で行われます。3番目のパラメータは、要素の比較順序を決定します。

デフォルトでは、第三パラメータを渡さない場合、関数はそれをstd::less()関数とみなします。この関数は、2つの引数を比較して、最初の引数が他の引数より小さいかどうかに基づいてtrueまたはfalseを返します。

では、今度はC++でベクトルを昇順にソートする方法を見てみましょう。

#include<iostream>    
#include<vector> 
#include<algorithm>
using namespace std;
int main()
{  
	//vector initialisation
	vector<int> vec {5, 4, 3, 2, 1};
	
	cout<<"Before sorting vector : ";
	for(auto i=vec.begin(); i<vec.end(); i++)
	{
		cout<<" "<<*i;
	}
	
	std::sort(vec.begin(),vec.end());//Sorting the vector
	
	cout<<"\n\nAfter sorting vector : ";
	for(auto i=vec.begin(); i<vec.end(); i++)
	{
		cout<<" "<<*i;
	}
	return 0;
}

出力:

Before sorting vector :  5 4 3 2 1

After sorting vector :  1 2 3 4 5

C++においてベクトルを降順に並べ替える

前述したように、C++におけるsort()関数の第三引数はソートの順序を決定します。したがって、我々はそれに関数を定義して、任意のベクトルを望む順序(この場合は降順)でソートすることができます。

1. sort()でgreater()を使用する。

less()関数に似て、greater()関数も真偽値を返しますが、逆の意味です。もしも最初の引数が2番目の引数よりも大きければ、関数はtrueを返し、そうでない場合はfalseを返します。

どのように使用するかを見て、降順に並べられたベクトルを取得する方法を見てみましょう。

#include<iostream>    
#include<vector> 
#include<algorithm>
using namespace std;
int main()
{  
	//vector initialisation
	vector<int> vec { 2,4,6,8,10 };
	
	cout<<"Before sorting vector : ";
	for(auto i=vec.begin(); i<vec.end(); i++)
	{
		cout<<" "<<*i;
	}
	
	std::sort(vec.begin(),vec.end(), greater<int>());//Sorting the vector using greater<int>() function
	
	cout<<"\n\nAfter sorting vector : ";
	for(auto i=vec.begin(); i<vec.end(); i++)
	{
		cout<<" "<<*i;
	}
	return 0;
}

出力:

Before sorting vector :  2 4 6 8 10

After sorting vector :  10 8 6 4 2

2. sort()の中でラムダ式を使用する。

C++11以降、C++プログラミングにおいてラムダ式の使用が導入されました。それらは単純な1行の関数であり、宣言を必要とせず、戻り値型の指定も必要ありません。

したがって、私たちはsort()関数によってソートの順序を決定するために、独自に定義したラムダ式を使用することができます。これは、sort()関数の第3パラメータとして、1行の式を定義することで行われます。どのように行われるか見てみましょう。

#include<iostream>    
#include<vector> 
#include<algorithm>
using namespace std;
int main()
{  
	//vector initialisation
	vector<int> vec { 11,22,33,44,55 };
	
	cout<<"Before sorting vector : ";
	for(auto i=vec.begin(); i<vec.end(); i++)
	{
		cout<<" "<<*i;
	}
	
	std::sort(vec.begin(),vec.end(), [](int &a, int &b){ return a>b; });
        //Sorting the vector using user-defined lambda expression(return type bool)
	
	cout<<"\n\nAfter sorting vector : ";
	for(auto i=vec.begin(); i<vec.end(); i++)
	{
		cout<<" "<<*i;
	}
	return 0;
}

以下の文を日本語で言い換えてください。1つのオプションで構いません:

Output: 出力:

Before sorting vector :  11 22 33 44 55

After sorting vector :  55 44 33 22 11

以下のコードでは、ベクトルから渡された2つの引数を比較するためにa>bの表現が使用されています。上記のコードの出力から分かるように、ベクトルは望む通り降順にソートされます。

結論

ですので、この記事ではC++でベクトルを昇順と降順の両方でソートする方法について学びました。このトピックに関するさらなる質問があれば、コメント欄を自由にご利用ください。

参考文献

  • Sorting in STL – JournalDev Tutorial,
  • – C++ algorithm Library,
  • How to sort an STL vector? – StackOverflow Question,
  • Sorting a vector in descending order – StackOverflow Question.
コメントを残す 0

Your email address will not be published. Required fields are marked *