2012-11-22 4 views
6

멀티 세트에 대한 다른 질문을했지만 지금은 인터넷에서 더 이상 복잡한 예를 찾을 필요가 없습니다.C++의 멀티 세트

multiset<A,B>이 어떻게 작동하는지 그리고 어떤 기능이 A와 B 중 어느 쪽인지, 그리고 그 중 일부를 생략 할 수 있다면 설명해주십시오. A 또는 B를 변수에 넣을 수 있습니까? 은 정말

+1

'표준 : multiset'는 최근 C++ (특히 2011 표준) 라이브러리에서 표준 템플릿입니다. 일반적으로 C++ 템플릿에 익숙합니까? 'std :: vector'와'std :: map'을 이미 이해하고 있습니까 ?? –

+0

http://www.sgi.com/tech/stl/multiset.html – DumbCoder

+0

@BasileStarynkevitch 실제로 std :: multiset은 C++ 98에 이미 존재하고있는 반면 사용자의 의견은 C++ 11 기능처럼 들립니다 (또는 나는 당신의 코멘트를 오해했다.) –

답변

17

std::multiset 클래스 템플릿 세트에 저장되는 객체의 유형을 지정하는 제 템플릿 파라미터와 비교 펑의 타입을 지정하는 제를 가지며, 일부 짧은 예 또는 기준을 이해할 것이다. 지금은 세 번째 템플릿 매개 변수를 무시할 수 있습니다.

두 번째 옵션 매개 변수 Bstrict weak ordering을 구현해야하며 세트/멀티 세트를 주문하는 데 사용됩니다. 이 순서는 요소 조회 작업의 로그 복잡성을 보장하는 데 필요합니다.

struct A 
{ 
    int x; 
}; 

struct B 
{ 
    bool operator()(const A& lhs, const A& rhs) const { 
    return lhs.x < rhs.x; 
    } 
}; 

이이 세트에 필요한

B comp; 
A a1, a2; 
bool a1lessThana2 = comp(a1, a2); 

예는 호출 될 수 있음을 의미 Boperator()을 가지고이 클래스는,/MULTISET 올바른 요소를 배치하는 예를 들면 다음과 같습니다 두 요소가 같은지 파악하십시오. 유형에 operator<이 있으면 두 번째 템플리트 매개 변수를 생략 할 수 있습니다.

bool operator<(constA& lhs, const A& rhs) { return lhs.x < rhs.x; } 

은 사용의 예입니다

int main() 
{ 
    std::multiset<A, B> m; 
    A a1, a2; 
    a1.x = 23; 
    a2.x = 100; 
    m.insert(a1); 
    m.insert(a2); 
} 
+1

@eco_student'B'는 순서 지정에 사용할 논리를 지정하거나 유효한'연산자 <'가 없으면 논리를 지정하는 방법입니다. 주어진 유형의 요소를 주문하는 기준이 다를 수 있으므로 설정/다중 세트 단위로 어떤 기준을 사용할 지 결정할 자유가 있습니다. – juanchopanza