// Virtual.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <memory> #include <algorithm> #include <set> #include <map> #include <string> #include <cstdlib> using namespace std; /*STL中set的一些操作 作者:blackmanba 时间:2010年10月6日 */ #define N 10 int main() { int arr1[N], arr2[N]; for (int i=0; i<N; i++) { arr1[i] = rand()%100; arr2[i] = rand()%100; } set<int> s1(arr1, arr1+N); set<int> s2(arr2, arr2+N); set<int> s_i, s_u, s_d, s_sd; printf("集合1为:/n"); copy(s1.begin(), s1.end(), ostream_iterator<int>(cout, " ")); printf("/n"); printf("集合2为:/n"); copy(s2.begin(), s2.end(), ostream_iterator<int>(cout, " ")); printf("/n"); printf("用set的迭代器输出元素/n"); for (set<int>::iterator iter = s2.begin(); iter != s2.end(); iter++) { cout<<*iter<<" "; } cout<<endl; //交集 set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s_i, s_i.begin())); printf("交集为:/n"); copy(s_i.begin(), s_i.end(), ostream_iterator<int>(cout, " ")); printf("/n"); //并集 set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s_u, s_u.begin())); printf("并集为:/n"); copy(s_u.begin(), s_u.end(), ostream_iterator<int>(cout, " ")); printf("/n"); //差集 set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s_d, s_d.begin())); printf("差集为:/n"); copy(s_d.begin(), s_d.end(), ostream_iterator<int>(cout, " ")); printf("/n"); //对称差 set_symmetric_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s_sd, s_sd.begin())); printf("对称差为:/n"); copy(s_sd.begin(), s_sd.end(), ostream_iterator<int>(cout, " ")); printf("/n"); /*set的插入操作*/ pair<set<int>::iterator, bool> p; p = s1.insert(100); if (p.second == true) { cout<<"插入成功!"<<endl; } else { cout<<*p.first<<"已经在集合中了"<<endl;//注意点运算符(.)比反引用运算符*的优先级高 } s1.insert(20); s1.insert(--s1.end(), 50); s1.insert(s2.begin(), s2.end()); /*map操作*/ map<int, string> myMap; //插入元素的方法 pair<int, string> mypair; mypair = make_pair(1, "wang"); pair<map<int, string>::iterator, bool> p1 = myMap.insert(mypair); myMap.insert(pair<int, string>(2, "yang")); myMap[3] = "zhang"; myMap.insert(pair<int ,string>(2, "xu")); /*输出元素*/ for (map<int, string>::iterator iter = myMap.begin(); iter != myMap.end(); ++iter) { cout<<(*iter).first<<" "<<(*iter).second<<endl; } }