2010-02-10 7 views

답변

18

std::pair은 미리 작성된 생성자 및 비교 연산자를 제공합니다. 이것은 또한 복사 생성자 나 operator < (예 : std::map에 의해 요구됨)을 통한 엄격한 약한 순서를 쓰지 않아도 std :: map과 같은 컨테이너에 저장할 수 있습니다. 만약 당신이 그들을 쓰지 않는다면 당신은 실수 할 수 없다. (얼마나 약한 주문이 작동 하는지를 기억 하는가?) std::pair을 사용하는 것이 더 신뢰할 만하다.

+1

std :: pair는 멤버에 대해 생성자 또는 연산자를 제공하지 않는다고 생각합니다. 너 정확히 뭘 생각해? – Manuel

+1

@Manuel, 실제로 나는 단지 충분히 확인했다.'pair'는 기본 ctor와 템플릿 복사 ctor를 제공한다. 의미가 있습니다 -이 경우, 각각의 경우에,'pair'는 기본 타입이 허용하는 경우에만 &를 호출 할 수 있습니다. –

+1

예. OP는 std :: pair *가 마술처럼 기본 유형에 대한 멤버를 생성했음을 암시하는 것처럼 보였습니다. 이 대답이 받아 들여지는 것이 이상한 일입니다. – Manuel

5

메모리 할당과 효율성 측면에서 차이점은 없습니다. 정확히 std::pair이 무엇인지 알기 때문입니다.

+0

그게 내가 궁금해 한 것에 대한 답입니다. 갑자기 효율성은 정말로 당신이하는 일에 달려 있다는 것을 깨닫게되었습니다. 너무 많은 정보가 있습니다. 나는 AshleysBrain의 질문을 더 받아 들일 것입니다 ... –

+2

아무런 문제는 없지만, 관심있는 것이면 사용의 용이성을 비교하는 것에 대해 물어볼 수 있습니다. Naveen과 저는 둘 다 질문에 대답했습니다. 명시된 바와 같이. (불평하지 않고, 단지 말하기 ...) –

+0

흠, 내 의견에 심각한 오타를 만든 것처럼 보입니다. "그것은 내가 궁금해했던 대답이다"라고 말해야했다. 나는 Ashleys에게 그가받은 것처럼 신속하게 받아 들여진 답변을 주었고, 당신처럼 좋은 대답을주었습니다. 선택하기가 어려웠지만 가장 유익 할 사람을 찾았습니다. –

1

메모리 할당이나 효율성 측면에서 차이가 없습니다. 사실, STL 구현에서 나는 pair를 다음과 같이 정의한다. struct pair

+0

어떤 STL 구현을 사용하고 있습니까? –

+0

VC9 컴파일러와 함께 제공되는 것을 사용하고 있습니다. – Naveen

+1

예, 이것은 사용자 정의 형식이 공용 데이터 멤버를 공개하는 경우 ('pair'가'first' 및'second'와 같은 경우) 'struct'여야한다는 공통된 규칙을 준수합니다. – Manuel

15

std::pair은 많은 생성자와 연산자가있다.

struct (firstsecond 제외) 명명 된 필드를 사용할 수 있으며 언제든지 확장 할 준비가되었습니다.

가급적이면 struct을 사용하면 약간의 오버 헤드가 발생할 수 있지만 유지 관리가 훨씬 쉽습니다.

+11

+1 유지 보수 의견. 나는 STL을 사용하여 모든 것을 (그리고 모든 것을 의미하는) 노력한 뉴저지의 엔지니어 그룹과 협력했으며 디자인이 표시 될 때 적절한 클래스/구조체를 만들기보다는 STL 컨테이너를 사용했습니다. 코드는 "if (route.first.second [* iter]. first) {...}"로 흩어졌습니다. 아! –

+0

좋은 생각입니다. 나중에이를 명심하십시오. –