>  기사  >  백엔드 개발  >  표준 라이브러리 정렬 기능이 특정 필드를 기준으로 사용자 정의 유형을 정렬할 수 있습니까?

표준 라이브러리 정렬 기능이 특정 필드를 기준으로 사용자 정의 유형을 정렬할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-11 12:13:03725검색

Can the Standard Library Sort Function Sort User-Defined Types Based on Specific Fields?

표준 라이브러리 정렬을 사용하여 사용자 정의 유형 정렬

질문:

표준 라이브러리 정렬을 사용할 수 있습니까? 라이브러리 정렬 기능은 내부의 특정 필드를 기반으로 사용자 정의 구조체의 벡터를 정렬하는 데 사용됩니다. 구조체?

예:

struct MyType {
    int a;
    int b;
};

vector<MyType> moo;

// Insert data into moo...

// Sort moo by the value of the 'a' field

답변:

예, 표준 라이브러리 정렬 기능이 이 시나리오를 처리할 수 있습니다. 사용자 정의 유형이 특정을 충족하는 경우 요구 사항:

  1. 비교 연산자 오버로드: 유형은 유형의 인스턴스가 비교되는 방법을 지정하기 위해 오버로드된 비교 연산자 bool 연산자<(const MyType& other) const를 구현해야 합니다.
  2. 복사 생성자: 복사 생성자(컴파일러 생성 또는 사용자 정의) 존재해야 합니다.

구현:

struct MyType {
    int a;
    int b;

    bool operator<(const MyType&amp; other) const {
        // Implementation that compares the 'a' fields
    }

    // Copy constructor
    MyType(const MyType&amp; other)
        : a(other.a), b(other.b) { }

    // Other constructors...
};

순서 함수를 사용하는 대체 접근 방식:

오버로드하는 경우 비교 연산자를 사용할 수 없는 경우 순서 함수나 펑터를 대신 세 번째 인수로 사용할 수 있습니다. 정렬 기능.

bool type_is_less(const MyType&amp; t1, const MyType&amp; t2) {
    // Comparison logic
}

std::sort(c.begin(), c.end(), type_is_less);

이 접근 방식은 다음과 같은 경우에 유용할 수 있습니다.

  • 비교 연산자 오버로드를 원하지 않습니다.
  • 내장 또는 포인터 유형을 정렬해야 합니다.
  • 여러 정렬 기준이 필요합니다.

위 내용은 표준 라이브러리 정렬 기능이 특정 필드를 기준으로 사용자 정의 유형을 정렬할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.