c++에서 merge()와 set_union()함수에서 계속 오류가 납니다...

조회수 724회

원소를 5개 가지고있는 벡터 v1과 원소를 3개 가지고있는 벡터 v2를

벡터 v3(비어있음)에 합병하거나, 벡터v3에 v1과 v2의 합집합을 넣고 싶습니다..

//#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;



int main()
{
    vector<int> v1 = { 50,10,30,80,60 };
    vector<int> v2 = { 20,70,40 };

    vector<int> v3(v1.size() + v2.size());

    merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
    auto iter = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
    v3.resize(iter,-v3.begin());
}

위처럼 코드를 작성했는데 merge()와 set_union()함수에서 오류가 납니다. 제가 잘못 적은건가요? 문법 오류는 잡히지 않는데 어째서 오류가 나는지 궁금합니다. 오류는 "sequence not ordered"라고 나옵니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • "sequence not ordered" 오류는 벡터가 정렬이 안 된 상태로 merge를 해서 그렇습니다. merge 함수를 사용하기 전에 벡터들을 소팅해 주셔야 합니다. 아래 코드 참고하세요

    #define _CRT_SECURE_NO_WARNINGS
    #include<iostream>
    #include<vector>
    #include <algorithm>
    using namespace std;
    
    int main()
    {
        vector<int> v1 = { 10,30,50,60,70,80 };
        vector<int> v2 = { 20,40,70 };
    
        vector<int> v3(v1.size() + v2.size());
    
        merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
    
        cout << "v1: ";
        for (int v : v1)
            cout << v << " ";
        cout << endl;
    
        cout << "v2: ";
        for (int v : v2)
            cout << v << " ";
        cout << endl;
    
        cout << "v3: ";
        for (int v : v3)
            cout << v << " ";
        cout << endl;
    
        vector<int>::iterator result = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
        v3.resize(result - v3.begin());
    
        cout << "v3: ";
        for (int v : v3)
            cout << v << " ";
        cout << endl;
    }
    
    • 결과

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 위 코드에선 벡터가 처음부터 소팅된 상태인데, sort 함수 등으로 소팅한 후에 merge하시면 됩니다. 알 수 없는 사용자 2020.8.22 22:06

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)