C++ Set example
#include <iostream>
#include <set>
using namespace std;
#define CLASS_STUDENT 30
typedef struct Student{
int mID;
int mScore;
string name;
bool operator< (const Student& st) const {
return st.mScore < mScore ? true : false;
}
}setStudent[CLASS_STUDENT];
set<Student>::iterator studentIters[CLASS_STUDENT];
int main()
{
set<int> s;
set<int> k;
//set은 중복을 허용하지 않고, 순서를 가지고 있다~!!!
//default오름차순 ~~!!!
set<Student> mClass;
for (auto& a : studentIters) {
a = mClass.end();
}
studentIters[1] = mClass.insert({ 1,100, "Dunkin" }).first;
studentIters[5] = mClass.insert({ 5,70, "CoCo" }).first;
studentIters[8] = mClass.insert({ 8,90, "Charls" }).first;
studentIters[25] = mClass.insert({ 25,30, "Memphis" }).first;
studentIters[7] = mClass.insert({ 7,40, "Couman" }).first;
//같은 키값을 넣으면, 넣은 값은 그냥 버림, 리턴은 기존값 iterator를 준다.
studentIters[8] = mClass.insert({ 8,40, "Coumano" }).first;
studentIters[9] = mClass.insert({ 9,60, "Hojberg" }).first;
cout << "5번 학생 이름" << studentIters[5]->name;
cout << "** ID별 table로 ID순 정렬된 원소를 출력\n";
for (auto& a : studentIters) {
if (a == mClass.end()) {
cout << "| 없다";
} else
cout << "| "<<a->mID << " " << a->name << " " << a->mScore;
}
cout <<"\n";
cout << "** 정렬된 원소를 출력\n";
set<Student>::iterator st_iter;
for (st_iter = mClass.begin(); st_iter != mClass.end(); st_iter++)
{
cout << " | "<<st_iter->mID << " " << st_iter->name << " " << st_iter->mScore ;
}
set<Student>::iterator st_iter_find;
cout << "\nFind 결과의 이름: " << mClass.find({ 9,60, "Hojberg" })->name;
cout << "\nFind 이름을 다르게 입력해도 : " << mClass.find({ 7,60, "KinKong" })->name;
cout << "\n9번 삭제한 뒤 return되는 iterator : " << mClass.erase(studentIters[9])->mID;
cout << "\n** 9번 삭제한 뒤 정렬된 원소를 다시 출력\n";
for (st_iter = mClass.begin(); st_iter != mClass.end(); st_iter++)
{
cout << " | " << st_iter->mID << " " << st_iter->name << " " << st_iter->mScore;
}
set<int>::iterator iter;
s.insert({ 1,100 });
s.insert({ 5,20 });
s.insert({ 8,20 });
s.insert({ 25,20 });
s.insert({ 7,20 });
s.insert({ 9,20 });
cout << "\n\n(정수편)** 정렬된 원소를 출력\n";
for (iter = s.begin(); iter != s.end(); iter++)
{
cout << *iter << " ";
}
cout << "\n** 8이 존재하면 8보다 큰 원소를 출력\n";
for (iter = s.find(8); iter != s.end(); iter++)
{
cout << *iter << " ";
}
cout << "\n** 333이 존재하나?\n";
iter = s.find(333);
if (iter != s.end()) {
cout << *iter << " : 존재 " << endl;
}
else {
cout << "존재하지 않음 " << endl;
}
cout << "\n** 넣고 다시 확인\n";
s.insert(333);
iter = s.find(333);
if (iter != s.end()) {
cout << *iter << " : 존재 " << endl;
}
else {
cout << "존재하지 않음 " << endl;
}
k.insert(5);
k.insert(20);
k.swap(s);
cout << "** k랑 swap 한뒤 원소를 출력\n";
for (iter = s.begin(); iter != s.end(); iter++)
{
cout << *iter << " ";
}
}