집합 (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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
STL 원자로 작동먼저 전연 두 갈래 나무의 정의를 살펴보자. 만약에 두 갈래 나무의 깊이를 h로 설정하면 h층을 제외한 다른 각 층(1~h-1)의 결점은 모두 최대 개수에 달하고 h층의 모든 결점은 연속적으로 맨 왼쪽에 집중된다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.