나는 구조의 std::set
있나요? 그리고 주어진 매개 변수에 대한 집합을 정렬하는 방법도 위에서 사용 된 함수의 작동을 설명 할 수 있습니까? 감사C++의 STL 세트 사용
1
A
답변
3
세트는 처음에는 Y를 비교하고, Y가 동일한 경우, 그때는 w 비교는 lexicographic order 의미로 주문한다.
어떻게 작동합니까?
std::tie
은 묶여있는 모든 요소의 튜플을 생성합니다. std::tuple
은 사전 식 순서에 따라 comparison operators (return 문에서 타이 비교에 사용됨)을 제공합니다.
다른 순서를 사용하는 방법은 무엇입니까?
그런 다음, 비교를 위해 (내가 이해 "회원") 만 특정 "매개 변수"를 사용하거나 해당 멤버를 사용하거나 설정을 구성 할 때 ad-hoc comparator를 제공하기 위해 operator<
을 정의합니다.
그러나 비교기를 정의하기 전에 두 번 생각하십시오. 집합에 추가 된 모든 요소는 고유해야합니다. 이 유일성은 동등한 관계로 결정됩니다 (즉, 두 개체가 다른 개체보다 더 적게 비교되지 않으면 두 개체가 동등한 것으로 간주됩니다). 따라서 비교기가 하나의 구조체 멤버 (예 : w
) 만 사용하는 경우 동일한 w
값을 갖는 두 개의 객체를 삽입 할 수 없습니다.
2
C++ std :: pair를 사용하는 것이 좋습니다.
set<pair<int,int> >st;
이 경우에는 pair.first 다음에 pair.second 순으로 정렬됩니다.
일반적으로입니다. C++ STL은 알려진 유형의 비교자를 사용합니다 (먼저 쌍 순서와 두 번째 쌍, 정수 집합은 오름차순으로 정렬 됨).
std :: set의 경우 std :: set에서 사용할 구조를 정의 할 때 < 연산자를 재정의해야합니다.
구조체 대신 쌍을 사용하도록 제안합니다. 구조가 임시적이며 집합에 대해서만 (원래 'temp'이름이 제안한 것처럼), 그 쌍이 유효한 대안이 될 것입니다. 그러나 OP의 질문에 구조체는 더 많은 데이터를 포함하고 (연산자는'temp' 대신에'weight'를 사용합니다.) OP는 all 대신에 일부 특정 "parameters"만을 사용하여 생각합니다. 구조체에 다른 중요한 데이터). 그래서 쌍이 진짜로 끝까지 갈 수 있는지 확실하지 않습니다. – Christophe
@Christophe 당신은 틀림없이 정확합니다. 그러나 나는 쌍을 제안했다. 왜냐하면 그것은 많은 경우에 작동하기 때문이다. 나는 항상 쌍을 사용한다.하지만 경쟁 프로그래밍 대회에서 그런 일이 일어난다. 일반적인 경우에 분명히하기 위해 당신과 함께 갈 것입니다. –