STL/정렬 관련 알고리즘 [STL] set zetz 2010. 5. 17. 15:45 /* STL은 정렬된 시퀀스에 대해 집합 관련 연산을 수행하는 다섯 개의 알고리즘 includes, set_union, set_intersection, set_difference, set_symmetric_difference를 제공한다. inlucdes 알고리즘은 주어진 구간의 원소들이 다른 구간에 포함되는지를 확인 set_union 알고리즘은 두 개의 구간으로 표현되는 두 집합의 합집합을 구하여 구간 [result, last) 에 집어넣고, 끝 경과(past-the-end) last를 리턴한다. set_difference 알고리즘은 첫 번째 구간에 속하는 원소들 중에서 두 번째 구간에 속하지 않은 원소들로 구성된 집합을 만들어낸다. set_intersection 알고리즘은 두 구간에 모두 속해 있는 원소들로 구성된 집합을 만들어낸다. set_symmetric_difference 는 양쪽 구간에 동시에 속해있지 않고, 한쪽 구간에만 속해 있는 원소들로 구성된 집합을 만들어낸다. 집합 연산의 시간 복잡도는 모두 선형적이다. */ #include #include #include #include using namespace std; template Container make(const char s[]) { return Container(&s[0], &s[strlen(s)]); } int main() { cout<< "Illustrating the generic set operations."<< endl; bool result; vector vector1 = make< vector >("abcde"), vector2 = make< vector >("aeiou"); // include 사용 예 result = includes(vector1.begin(), vector1.end(), vector2.begin(), vector2.end()); assert (result == false); result = includes(vector1.begin(), vector1.end(), vector2.begin(), vector2.begin() + 2); // 'a'와 'e'가 vector1에 포함되어 있다. assert (result == true); // set_union 사용 예 vector setUnion; set_union(vector1.begin(), vector1.end(), vector2.begin(), vector2.end(), back_inserter(setUnion)); assert (setUnion == make< vector >("abcdeiou")); // set_intersection 사용 예 vector setIntersection; set_intersection(vector1.begin(), vector1.end(), vector2.begin(), vector2.end(), back_inserter(setIntersection)); assert (setIntersection == make< vector >("ae")); // set_symmetric_difference 사용 예 vector setDifference; set_symmetric_difference(vector1.begin(), vector1.end(), vector2.begin(), vector2.end(), back_inserter(setDifference)); assert (setDifference == make< vector >("bcdiou")); cout<< " --- Ok."<< endl; return 0; } 저작자표시