2016-06-20 1 views
2

두 개의 벡터 "a"와 "b"가 있다고 가정하고 "a"를 정렬하려고하고 "b" 정렬 된 "a"와 같이 다시 정렬되어야합니다.두 개의 std :: vector를 하나의 std :: vector에 std :: pair로 결합하는 방법

나는 표준의 하나의 벡터로이 두 벡터를 결합한다 :: 쌍을 나는 표준 : : 정렬을 적용 할 수 있도록 생각할 수있는 가장 논리적 인 방법은 아래 내가 기대하고 장난감 예를

std::vector<int> a(3,1); 
std::vector<std::string> b(3,"hi"); 
std::vector<std::pair<int,std::string>> p(3); 

for(int i=0;i<a.size();i++){ 
    p.push_back(std::make_pair(std::ref(a[i]),std::ref(b[i]))); 
} 

p[0].first = p[0].first+1; 

std::cout << p[0].first << " " << a[0] << std::endl; 

입니다 그것은 2를 인쇄 할 수 있지만 나는 또한

for(int i=0;i<a.size();i++){ 
    p[i].first = std::ref(a[i]); 
    p[i].second = std::ref(b[i]); 
} 

으로 for 루프를 교체하려고 2 1.를 인쇄하지만 여전히 2 1. 내가 다시 "P"의 값을 복사 할 수 인쇄하는 "A"와 정렬 후에 "b"하지만 "a"와 "b"가 클 경우 비효율적입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

제 컴파일러는 gcc 4.9.3입니다.

+1

'std :: pair '가 잘못된 것처럼 보입니다. 'std :: pair , std :: reference_wrapper >'을 의미하지 않았습니까? – lorro

답변

2

당신은 참조 쌍의 벡터가 좋아합니다 : 가능한 모든 작업이 언급 한 쌍 함께 할 수있는 것은 아니지만

#include <iostream> 
#include <string> 
#include <vector> 
#include <utility> 

int main() { 
    std::vector<int> a(3,1); 
    std::vector<std::string> b(3,"hi"); 
    std::vector<std::pair<int&, std::string&>> p; 

    for(int i=0;i<a.size();i++){ 
     p.push_back(std::pair<int&, std::string&>(a[i],b[i])); 
    } 

    p[0].first = p[0].first+1; 

    std::cout << p[0].first << " " << a[0] << std::endl; 
} 

을 조심하십시오. 예 : 매개 변수없는 생성자로 인스턴스를 만들 수 없습니다. 따라서 예에서와 같이 세 개의 빈 요소로 벡터를 초기화 할 수 없습니다.

std::vector<std::pair<int&, std::string&>> p(3); 
관련 문제