멤버가 두 명 뿐인 an std::pair
과 an 의 차이가 std::tuple
있나요? ( std::pair
두 명만 필요하고 tuple
더 많거나 적을 수 있는 명백한 것 외에도 ...)
답변:
std::map
사용하는 std::pair<const Key,T>
것으로 보입니다 value_type
. 튜플은 정확히 어디에 사용 std::map
됩니까?
std::map
.
이것은 매우 늦게 대답 때문이 아니라, 참고 인 std::pair
멤버 변수로 정의되고, 그 크기는 사용하여 최적화 할 수없는 빈 기본 클래스 최적화를 ( first
그리고 second
하나 또는 둘 모두가 빈 클래스 인 경우에도 서로 다른 주소를 차지해야합니다). 이는 정렬 요구 사항 second_type
이 무엇이든간에 악화 되었으므로 최악의 경우 결과 std::pair
는 기본적으로 필요한 크기의 두 배가 될 것입니다.
std::tuple
도우미 함수를 통해서만 액세스 할 수 있으므로 둘 중 하나가 비어있는 경우 두 유형에서 파생되어 오버 헤드를 절약 할 수 있습니다. 적어도 GCC의 구현, 확실히이 작업을 수행합니다 ... 당신이 이것을 확인하기 위해 헤더를 통해 찌를뿐만 아니라 거기에 수 이 증거로.
[[no_unique_address]]
std::pair
은의 단점을 제거해야합니다 .
std::tuple
의 이름은 이상 (한 여분의 문자)입니다. 더 많은 문자가 오른손으로 입력되므로 대부분의 사람들이 입력하기가 더 쉽습니다.
즉, std::pair
0, 1, 3 또는 그 이상이 아닌 두 개의 값만 가질 수 있습니다. 두 가지 값. 그러나 튜플에는 값 수에 대한 의미 적 제한이 거의 없습니다. 은 std::pair
, 그러므로, 당신이 실제로 값의 쌍을 지정하려는 경우에 사용하는보다 정확한 입력 안전 유형입니다.
std::tuple<>
없습니다 또한 입력 안전한 (? 어떻게 수 없습니다), 그리고 2
더 이상 의미 다릅니다 pair
.
.first
와.second
세 번째 (또는 그 이상)의 회원 (들)의 코드를 변경에 필요한 경우 편리, 그들은 어떤 도움을 제공하지 않습니다. 나는std::get
모든 게터에 관계없이 모든 것을 변경할 필요가 없으며 데이터 유형과make_pair
호출 호출에 관계없이 사용하는 경향이 있음을 알았습니다make_tuple
.