c++에서 merge()와 set_union()함수에서 계속 오류가 납니다...
조회수 733회
원소를 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; }
- 결과
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력