C++에서 벡터 정렬

Jinku Hu 2023년10월12일
  1. std::sort알고리즘을 사용하여 벡터 요소 정렬
  2. std::sort함수를 Lambda 표현식과 함께 사용하여struct의 벡터 정렬
  3. std::sort함수를 사용자 정의 함수와 함께 사용하여struct의 벡터를 정렬합니다
C++에서 벡터 정렬

이 기사에서는 C++에서 벡터를 정렬하는 방법에 대한 여러 방법을 보여줍니다.

std::sort알고리즘을 사용하여 벡터 요소 정렬

std::sort함수는 다른 객체와 함께 작동하는 일반 알고리즘을 구현하고 세 번째 인수로 전달 된 비교 함수를 사용하여 범위에서 주어진 요소를 정렬합니다. 세 번째 인수없이 함수를 사용할 수 있습니다.이 경우 요소는operator<를 사용하여 정렬됩니다. 다음 예제 코드는 요소가operator<멤버 함수를 가지며 기본 비교기로 정렬 할 수있는 문자열 유형 인 이러한 시나리오를 보여줍니다.

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

using std::cin;
using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;

template <typename T>
void printVector(vector<T> &vec) {
  for (const auto &item : vec) {
    cout << item << ", ";
  }
  cout << endl;
}

int main() {
  vector<string> vec1 = {"highway", "song",      "world", "death",
                         "mom",     "historian", "menu",  "woman"};
  printVector(vec1);
  sort(vec1.begin(), vec1.end());
  printVector(vec1);

  return EXIT_SUCCESS;
}

출력:

highway, song, world, death, mom, historian, menu, woman,
death, highway, historian, menu, mom, song, woman, world,

std::sort함수를 Lambda 표현식과 함께 사용하여struct의 벡터 정렬

또는 사용자 정의 비교 함수 개체를 람다 식으로 구성하여 사용자 정의 구조를 정렬 할 수 있습니다. 이 경우, 데이터 멤버가 다른struct cpu가 있으며, 각각value또는property1멤버를 비교하는 함수 객체를 전달하여 두 개의sort호출이 구성됩니다.

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

using std::cin;
using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;

struct cpu {
  string property1;
  string property2;
  string property3;
  int value;
} typedef cpu;

void printVector(vector<cpu> &vec) {
  for (const auto &item : vec) {
    cout << item.property1 << " : " << item.property2 << " : " << item.property3
         << " : " << item.value << endl;
  }
  cout << endl;
}

int main() {
  vector<cpu> vec3 = {{"WMP", "GR", "33", 2023},
                      {"TPS", "US", "31", 2020},
                      {"EOM", "GB", "36", 2021},
                      {"AAW", "GE", "39", 2024}};

  printVector(vec3);
  sort(vec3.begin(), vec3.end(),
       [](cpu &x, cpu &y) { return x.value < y.value; });
  sort(vec3.begin(), vec3.end(),
       [](cpu &x, cpu &y) { return x.property1 < y.property1; });
  printVector(vec3);

  return EXIT_SUCCESS;
}

std::sort함수를 사용자 정의 함수와 함께 사용하여struct의 벡터를 정렬합니다

이전 방법은 더 큰 코드베이스에서 사용하기에는 매우 유연하지 않으며 비교 기능이 복잡하면 코드를 다소 부피가 커질 수 있습니다. 또 다른 해결책은 비교 함수를struct멤버로 구현하고 범위 연산자를 통해 액세스 할 수 있도록static으로 선언하는 것입니다. 또한 이러한 함수는bool값을 반환해야하며 두 개의 매개 변수 만 있어야합니다.

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

using std::cin;
using std::cout;
using std::endl;
using std::sort;
using std::string;
using std::vector;

struct cpu {
  string property1;
  string property2;
  string property3;
  int value;

 public:
  static bool compareCpusByValue(cpu &a, cpu &b) { return a.value < b.value; }

  static bool compareCpusByProperty1(cpu &a, cpu &b) {
    return a.property1 < b.property1;
  }
} typedef cpu;

void printVector(vector<cpu> &vec) {
  for (const auto &item : vec) {
    cout << item.property1 << " : " << item.property2 << " : " << item.property3
         << " : " << item.value << endl;
  }
  cout << endl;
}

int main() {
  vector<cpu> vec3 = {{"WMP", "GR", "33", 2023},
                      {"TPS", "US", "31", 2020},
                      {"EOM", "GB", "36", 2021},
                      {"AAW", "GE", "39", 2024}};

  printVector(vec3);
  sort(vec3.begin(), vec3.end(), cpu::compareCpusByProperty1);
  sort(vec3.begin(), vec3.end(), cpu::compareCpusByValue);
  printVector(vec3);

  return EXIT_SUCCESS;
}
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Vector