두 필드와 쌍으로 구조체를 사용하는 것 사이의 메모리 할당 및 효율성에 대한 차이점은 무엇입니까?구조체를 두 개의 필드와 쌍으로 사용하는 것의 차이점은 무엇입니까?
답변
std::pair
은 미리 작성된 생성자 및 비교 연산자를 제공합니다. 이것은 또한 복사 생성자 나 operator <
(예 : std::map
에 의해 요구됨)을 통한 엄격한 약한 순서를 쓰지 않아도 std :: map과 같은 컨테이너에 저장할 수 있습니다. 만약 당신이 그들을 쓰지 않는다면 당신은 실수 할 수 없다. (얼마나 약한 주문이 작동 하는지를 기억 하는가?) std::pair
을 사용하는 것이 더 신뢰할 만하다.
메모리 할당과 효율성 측면에서 차이점은 없습니다. 정확히 std::pair
이 무엇인지 알기 때문입니다.
그게 내가 궁금해 한 것에 대한 답입니다. 갑자기 효율성은 정말로 당신이하는 일에 달려 있다는 것을 깨닫게되었습니다. 너무 많은 정보가 있습니다. 나는 AshleysBrain의 질문을 더 받아 들일 것입니다 ... –
아무런 문제는 없지만, 관심있는 것이면 사용의 용이성을 비교하는 것에 대해 물어볼 수 있습니다. Naveen과 저는 둘 다 질문에 대답했습니다. 명시된 바와 같이. (불평하지 않고, 단지 말하기 ...) –
흠, 내 의견에 심각한 오타를 만든 것처럼 보입니다. "그것은 내가 궁금해했던 대답이다"라고 말해야했다. 나는 Ashleys에게 그가받은 것처럼 신속하게 받아 들여진 답변을 주었고, 당신처럼 좋은 대답을주었습니다. 선택하기가 어려웠지만 가장 유익 할 사람을 찾았습니다. –
std::pair
은 많은 생성자와 연산자가있다.
struct
(first
및 second
제외) 명명 된 필드를 사용할 수 있으며 언제든지 확장 할 준비가되었습니다.
가급적이면 struct
을 사용하면 약간의 오버 헤드가 발생할 수 있지만 유지 관리가 훨씬 쉽습니다.
+1 유지 보수 의견. 나는 STL을 사용하여 모든 것을 (그리고 모든 것을 의미하는) 노력한 뉴저지의 엔지니어 그룹과 협력했으며 디자인이 표시 될 때 적절한 클래스/구조체를 만들기보다는 STL 컨테이너를 사용했습니다. 코드는 "if (route.first.second [* iter]. first) {...}"로 흩어졌습니다. 아! –
좋은 생각입니다. 나중에이를 명심하십시오. –
std::pair<int, int> vs struct with two int's에 명시된 바와 같이 초기화가 이루어지지 않으므로 구조체가 조금 더 빨라질 수 있습니다.
std :: pair는 멤버에 대해 생성자 또는 연산자를 제공하지 않는다고 생각합니다. 너 정확히 뭘 생각해? – Manuel
@Manuel, 실제로 나는 단지 충분히 확인했다.'pair'는 기본 ctor와 템플릿 복사 ctor를 제공한다. 의미가 있습니다 -이 경우, 각각의 경우에,'pair'는 기본 타입이 허용하는 경우에만 &를 호출 할 수 있습니다. –
예. OP는 std :: pair *가 마술처럼 기본 유형에 대한 멤버를 생성했음을 암시하는 것처럼 보였습니다. 이 대답이 받아 들여지는 것이 이상한 일입니다. – Manuel