C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++STLを使用したカスタムオブジェクトのベクトルの並べ替え


C++STL関数std::sortを使用して、カスタムオブジェクトのベクトルを並べ替えることができます。ソート関数には、最初、最後、コンパレータを引数として取るオーバーロードされた形式があります。最初と最後は、コンテナの最初と最後の要素へのイテレータです。コンパレータは、コンテナのソート方法を指示するために使用できる述語関数です。

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;
struct MyStruct {
   int key;
   string data;
   MyStruct(int key, string data) {
      this -> key = key;
      this -> data = data;
   }
};
int main() {
   std::vector<MyStruct> vec;
   vec.push_back(MyStruct(4, "test"));
   vec.push_back(MyStruct(2, "is"));
   vec.push_back(MyStruct(3, "a"));
   vec.push_back(MyStruct(1, "this"));
   
   // Using lambda expressions in C++11
   sort(vec.begin(), vec.end(), [](const MyStruct& lhs, const MyStruct& rhs) {
      return lhs.key < rhs.key;
   });
   for(auto it = vec.begin(); it != vec.end(); it++) {
      cout << it -> data << endl;
   }
}
出力 これにより出力が得られます-

this is a test

古いバージョンのC++で作業している場合は、関数参照を渡すこともできます-

//define the function:
bool comparator(const MyStruct& lhs, const MyStruct& rhs) {
   return lhs.key < rhs.key;
}
// pass it to sort:
sort(vec.begin(), vec.end(), &comparator);

class / structの<演算子をオーバーロードして、sort(first、last)フォームを直接使用することもできます。そのため、並べ替えるときに、この関数を使用してアイテムを比較します。



  1. STLでベクトルを実装するC++プログラム

    ベクトルには、要素が挿入または削除されたときに動的配列のように自動的にサイズを変更する機能があり、コンテナはストレージを自動的に処理します。ベクトル要素は、イテレータを使用してアクセスおよびトラバースできるように、連続したストレージに配置されます。データは、ベクトルの最初、中間、または最後で挿入または消去できます。 機能と説明: List of functions used here:    v.size() = Returns the size of vector.    v.push_back() = It is used to insert ele

  2. STLを使用したC++の配列製品

    これは、配列製品を見つけるためのC++プログラムの例です。 アルゴリズム Begin Initialize the values of array. Call used defined function accumulate to return the product of array. Print the solution. End. サンプルコード #include <iostream> #include <numeric> using namespace std; int ProductOfArray(int p[], int n) { &nbs