C++에서 벡터 정렬
-
std::sort
알고리즘을 사용하여 벡터 요소 정렬 -
std::sort
함수를 Lambda 표현식과 함께 사용하여struct
의 벡터 정렬 -
std::sort
함수를 사용자 정의 함수와 함께 사용하여struct
의 벡터를 정렬합니다
이 기사에서는 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;
}
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