집합 (set 와 multiset)

set/multiset
간단 한 소개
    
set
하나
집합 하 다.
용기, 그 안에 포 함 된 요 소 는?
유일 하 다
라 고 말 했다.
집합 중의 원 소 는 일정한 순서에 따라 배열 된다.
。요소 삽입 과정 은 정렬 규칙 에 따라 삽입 되 기 때문에 삽입 위 치 를 지정 할 수 없습니다.
    
set
붉 은 검 은 나무 변체 의 데이터 구 조 를 이용 하여 이 루어 지고 붉 은 검 은 나 무 는 균형 이 진 트 리 에 속한다.삽입 작업 과 삭제 작업 에 있어 서 비 교 됩 니 다.
vector
빨리.
    
set
원 소 를 직접 액세스 할 수 없습니다.(사용 불가
at.(pos)
... 과
[]
연산 자.
    
multiset
... 과
set
의 차이 점:
set
유일한 키 값 을 지원 합 니 다. 모든 요소 값 은 한 번 만 나타 날 수 있 습 니 다.그리고
multiset
중.
같은 값 은 여러 번 나타 날 수 있다.

    
바로 고치 면 안 돼 요.
set
혹시
multiset
용기 의 요소 값 은 이 용기 가 자동 으로 정렬 되 기 때 문 입 니 다.요소 값 을 수정 하려 면 기 존 요 소 를 삭제 하고 새로운 요 소 를 삽입 해 야 합 니 다.
     #include
#include"set"
#include"iostream"
#include"algorithm"
#include"functional"
using namespace std;

void print(setse_1)
{ 
	for (set::iterator it = se_1.begin(); it != se_1.end(); it++)
	{
		cout << *it << " ";
	} 
 cout << endl; 
}
void printG(set>se_1)
{
	for (set >::iterator it = se_1.begin(); it != se_1.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}
void printM(multisetse_1)
{
	for (set::iterator it = se_1.begin(); it != se_1.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}
/*   */
int main01()
{
	set se_1;
	multisetse_2;//                 
	int a[] = { 14, 12, 12, 12, 12, 43, 34, 25, 26, 67, 18, 39 };
	for(int i = 0; i < 12; i++)
	{
		se_1.insert(a[i]);//12,14,18,25,26,34,39,43,67
		se_2.insert(a[i]);//12,12, 12, 12, 14,18,25,26,34,39,43,67  // multiset      
	}
	cout << "  insert       :";
	print(se_1);
	printM(se_2);
	set se_3 = se_1;
	cout << "             :";
	print(se_3);
	setse_4(a,a+sizeof(a)/sizeof(int));
	cout << "           :";
	print(se_4);
	return 0;
}


/*     */
/*      set        
 set.insert(elem); //        。
 set.begin(); //              。
 set.end(); //                 。
 set.rbegin(); //                。
 set.rend(); //                    。
*/
/*      set    
 set.clear(); //      
 set.erase(pos); //   pos         ,            。
 set.erase(beg,end); //    [beg,end)      ,           。
 set.erase(elem); //        elem    。
*/
int main02()
{
	int a[] = {11,12,13,14,15};
	int b[] = {10,20};
	setse_1(a, a + 5);
	setse_2(b,b+2);
	///////////////    ////////////
	se_1.insert(35);
	se_1.insert(25);
	se_1.insert(48);
	cout << "  : ";
	print(se_1);//11,12,13,14,15,25,35,48
	se_1.insert(se_2.begin(),se_2.end());//10,11,12,13,14,15,20,25,35,48
	print(se_1);
	cout << "  : " << se_1.size()<::iterator it1 = se_1.begin();
	se_1.erase(it1);//11,12,13,14,20,25,35,48
	set::iterator it2 = se_1.begin();
	set::iterator it3 = se_1.begin();
	it3++;
	it3++;
	se_1.erase(it2,it3);//13,14,20,25,35,48
	cout << "  : ";
	print(se_1);
	return 0;
}
/*     Set        
 set > setIntA; //             。
 set> setIntB; //             。
 set     set>。
 less  greater   int         ,         set      
    。
    1: less<>  greater<>   ?
    2:    set<>    int   ,          , set       ?
          ,            ,      ,      functor。
struct greater
{
bool operator() (const int& iLeft, const int& iRight)
{
return (iLeft>iRight); //      less  ,      return (iLeftid = id;
		this->name = name;
	}
	string printname()
	{
		return name;
	}
	friend ostream& operator<s2.id);
	}
};
int main03()
{
	int a[] = { 14, 12, 12, 12, 12, 43, 34, 25, 26, 67, 18, 39 };
	set >se_1(a, a + sizeof(a) / sizeof(int));
	set >se_2(a, a + sizeof(a) / sizeof(int));

	cout << "       ";
	print(se_1);//12,14,18,25,26,34,39,43,67
	cout << "       ";
	printG(se_2);//67, 43, 39, 34, 26, 25, 18, 14, 12
	setstu1;
	stu1.insert (Student(100,"zhao"));
	stu1.insert(Student(101,"qian"));
	stu1.insert(Student(102,"sun "));
	stu1.insert(Student(103,"li  "));
	for ( set::iterator it=stu1.begin(); it!=stu1.end(); it++)
	{   
		//  <<
		cout << *it << "\t ";//103,li  102,sun  101,qian  100,zhao
	}
	cout << endl;
	return 0;
}
/*     set    
 set.find(elem); //   elem   ,      elem       。
 set.count(elem); //        elem      。   set   ,     0,  
   1。   multiset   ,       1。
 set.lower_bound(elem); //     >=elem       。
 set.upper_bound(elem); //      >elem       。

*/
int main04()
{
	int a[] = { 14, 12, 12, 12, 12, 43, 34, 25, 26, 67, 18, 39 };
	setse_1(a,a+sizeof(a)/sizeof(int));
	set::iterator it1= se_1.find(25);
	cout << "             : "<::iterator  it2 = se_1.lower_bound(25);
	cout << "        25  : ";
	for (; it2!=se_1.end(); it2++)   //25,26,34,39,43,67,        25  
	{ cout << *it2 << " "; }
	cout << endl;

	set::iterator  it3 = se_1.upper_bound(25);
	cout << "      25  : ";
	for (; it3 != se_1.end(); it3++)   //26,34,39,43,67,        25  
	{
		cout << *it3 << " ";
	}
	cout << endl;

	return 0;
}
/*    set.equal_range(elem); //       elem       (           )      。 
      ,       ,  [beg,end)。 
           ,             pair  。
      pair         。
*/
/* pair< set::iterator, set::iterator > pairIt = setInt.equal_range(5);
      pair    
 pair     ,             。
 pair         ,      ,  T1   int, T2   float。 T1,T2   
       。
 pair.first   pair        ,   T1   。
 pair.second   pair        ,  T2   。
*/
int main05()
{
	int a[] = { 14, 12, 12, 25, 12, 12, 25, 43, 34, 25, 26, 67, 25, 18, 39 };
	multisetse_1(a, a + sizeof(a) / sizeof(int));
	pair::iterator, multiset::iterator> it1 = se_1.equal_range(25);//       25      
	multiset::iterator te;
	for (te=it1.first; te!= it1.second; te++)
	{
		cout << *te << " ";
	}
	cout << endl;
	
	return 0;
}
int main()
{
	//main01();//   
	//main02();//       
	//main03();//  
	//main04();//  
	main05();//pair(set.equal_range(elem);)
	system("pause");
	return 0;
}

/ / 사례 1
//           、    。        (1)      ,(2)    ,
//          ,       ,      
//  (   )/     
#include"iostream"
using namespace std;
#include"string"
#include"set"
//   
class Employee
{
public:
	string name;
	string department;
public:
	Employee(string nam, string dep)
	{
		name = nam;
		department = dep;
	}
	////hanshu duixiang 
	bool operator 0) ? true : false;
		if (department.compare(e.department) == 0)
		{
			mark = (name.compare(e.name) > 0) ? true : false;
		}
		return mark;
	}


};
//guyuanguanli
class EManager
{
public:
		multiset se_1;
public:
	bool add(Employee&e)
	{
		se_1.insert(e);
		return true;
	}
	void show()
	{
		multiset::iterator  it = se_1.begin();
		for (; it != se_1.end(); it++)
		{
			cout << it->name <department << endl;
		}
	}

};
int main()
{
	Employee e1("zhangsan", "   ");
	Employee e2("lisi", "   ");
	Employee e3("wangwu", "   ");
	Employee e4("zhaoliu", "   ");
	
	EManager  em1;
	em1.add(e1);
	em1.add(e2);
	em1.add(e3);
	em1.add(e4);
	em1.show();
	system("pause");
	return 0;

	
}

좋은 웹페이지 즐겨찾기