map-소스 한개

Posted 2012. 8. 13. 22:18

#include <iostream>
#include <cstring>
#include <map>
using namespace std;

 

typedef struct PersonInfo
{
 char Name[20];
 int Age;
 char ID[20];
 char PW[20];
}Person;

 

map<int, Person*> Data;
map<int, Person*>::iterator iter;

 

void MainMenu();
int SelectMenu();

int InputNumber();
void InputData(int num);

void DataShowAll();
void DataShowSelect();

void DataDeleteSelect();
void DataDeleteAll();

 

void main ()
{
 int Select;
 int InputNum;
 while(1)
 {
  MainMenu();
  Select = SelectMenu();
  switch(Select)
  {
  case 1://입력
   InputNum = InputNumber();
   InputData(InputNum);
   break;
  case 2://전체출력
   DataShowAll();
   break;
  case 3://선택출력
   DataShowSelect();
   break;
  case 4://선택삭제
   DataDeleteSelect();
   break;
  case 5://전체삭제
   DataDeleteAll();
   break;
  case 6:
   cout<<"프로그램 종료"<<endl;
   DataDeleteAll();
   return;
   break;
  }
 };
}


void MainMenu()
{
 cout<<"----------"<<endl;
 cout<<"   map~   "<<endl;
 cout<<"----------"<<endl;
 cout<<"1.입    력"<<endl;
 cout<<"2.전체출력"<<endl;
 cout<<"3.선택출력"<<endl;
 cout<<"4.선택삭제"<<endl;
 cout<<"5.전체삭제"<<endl;
 cout<<"6.종    료"<<endl;
 cout<<"----------"<<endl;
}

 

int SelectMenu()
{
 int Select;
 cout<<"선 택 : ";
 cin>>Select;
 return Select;
}

 

int InputNumber()
{
 int num;
 cout<<"몇명 입력 : ";
 cin>>num;
 return num;
}

 

void InputData(int num)
{
 for(int i=0 ; i<num ; i++)
 {
  Person* ptmp = new Person;
  cout<<"이  름 : ";
  cin>>ptmp->Name;
  cout<<"나  이 : ";
  cin>>ptmp->Age;
  cout<<"I    D : ";
  cin>>ptmp->ID;
  cout<<"P    W : ";
  cin>>ptmp->PW;
  Data[i] = ptmp;   //배열처럼 첫번째 키값에 second로 tmp를 넣음. 이게 곧 push_back()
 }
}

 

void DataShowAll()
{
 if( Data.empty() )
 {
  cout<<"입력된 정보가 없쑴"<<endl;
  return;
 }

 for(iter = Data.begin() ; iter != Data.end() ; iter++) //
 {
  cout<<"이  름 : "<<(*iter).second->Name<<endl;
  cout<<"나  이 : "<<(*iter).second->Age<<endl;
  cout<<"I    D : "<<(*iter).second->ID<<endl;
  cout<<"P    W : "<<(*iter).second->PW<<endl;
 }
 cout<<"출력 완료"<<endl;
}

 

void DataShowSelect()
{
 if( Data.empty() )
 {
  cout<<"입력된 정보 없쑴"<<endl;
  return;
 }

 int num;
 cout<<"검색할 정보 입력"<<endl;
 cout<<"1. 이 름,  2. I  D"<<endl;
 cout<<"선  택 : ";
 cin>>num;

 char tmp[20];
 if(num == 1)
 {
  cout<<"이름 입력 : ";
  cin>>tmp;
  for(iter = Data.begin() ; iter != Data.end() ; )
  {
   if( !strcmp(tmp, (*iter).second->Name) )
   {
    cout<<"이  름 : "<<(*iter).second->Name<<endl;
    cout<<"나  이 : "<<(*iter).second->Age<<endl;
    cout<<"I    D : "<<(*iter).second->ID<<endl;
    cout<<"P    W : "<<(*iter).second->PW<<endl;
    cout<<"출력 완료"<<endl;
    return;
   }
   else
    iter++;
  }
 }
 else if(num == 2)
 {
  cout<<"I D 입력 : ";
  cin>>tmp;
  for(iter = Data.begin() ; iter != Data.end() ; )
  {
   if( !strcmp(tmp, (*iter).second->ID) )
   {
    cout<<"이  름 : "<<(*iter).second->Name<<endl;
    cout<<"나  이 : "<<(*iter).second->Age<<endl;
    cout<<"I    D : "<<(*iter).second->ID<<endl;
    cout<<"P    W : "<<(*iter).second->PW<<endl;
    cout<<"출력 완료"<<endl;
    return;
   }
   else
    iter++;
  }
 }
}

 

void DataDeleteSelect()
{
 if( Data.empty() )
 {
  cout<<"입력된 정보 없쑴"<<endl;
  return;
 }

 char tmp[20];
 int num;
 cout<<"삭제할 정보 검색"<<endl;
 cout<<"1. 이  름,  2. I  D"<<endl;
 cout<<"선  택 : ";
 cin>>num;
 if(num == 1)
 {
  cout<<"이름 입력 : ";
  cin>>tmp;
  for(iter = Data.begin() ; iter != Data.end() ; )
  {
   if( !strcmp(tmp, (*iter).second->Name) )
   {
    delete (*iter).second;         //vector와 list의 차이점은 second에 잡혀있는 메모리를 해제하는것
    iter = Data.erase(iter);
    cout<<"삭제완료"<<endl;
    return;
   }
   else
    iter++;
  }
 }
 else if(num == 2)
 {
  cout<<"I D 입력 : ";
  cin>>tmp;
  for(iter = Data.begin() ; iter != Data.end() ; )
  {
   if( !strcmp(tmp, (*iter).second->ID) )
   {
    delete (*iter).second;      //vector와 list의 차이점은 second에 잡혀있는 메모리를 해제하는것
    iter = Data.erase(iter);
    cout<<"삭제완료"<<endl;
    return;
   }
   else
    iter++;
  }
 }
 cout<<"삭제 완료"<<endl;
}

void DataDeleteAll()
{
 if( Data.empty() )
 {
  cout<<"입력된 정보 없쑴"<<endl;
  return;
 }
 for(iter = Data.begin() ; iter != Data.end() ; iter++)
 {
  delete (*iter).second;      //vector와 list의 차이점은 second에 잡혀있는 메모리를 해제하는것
 }

 Data.clear();           //그다음 clear로 객체 비움
 cout<<"전체 삭제 완료"<<endl;
}

'C++ > STL-map' 카테고리의 다른 글

map  (0) 2012.08.13

map

Posted 2012. 8. 13. 22:16

map과 multimap의 차이점

multimap은 동일한 key값을 사용할수 있지만 map은 불가능

-> Max[0] = "123";

-> Max[0] = "456";

 

 map은 first(key)와second(&val)로 되어있다.

map의 find는 key값으로만 검색이 가능하다.

second의 값을 find하려면 다른 방식을 선택하는게 좋음 

 

장 점

검색할 일이 많을떄 쓰면 용이함

 

단 점

마찬가지로 배열이라 삽입 삭제시 속도저하가 심하다

 

주 의

'C++ > STL-map' 카테고리의 다른 글

map-소스 한개  (0) 2012.08.13

list-소스한개

Posted 2012. 8. 13. 22:16

#include <iostream>
#include <cstring>
#include <list>
using namespace std;

 typedef struct PersonInfo{
 char Name[20];
 int Age;
 char ID[20];
 char PW[20];
}Person;

//유저 define type data인 경우 직접 조건을 만들어 줘야됨
 bool Comp(Person first, Person Second) //적은숫자가 앞으로 가게 정렬(오름차순 정렬)
{
 if(first.Age < Second.Age)
  return true;
 return false;
};

void MainMenu();
int SearchData();

void main()
{
 int Select;
 list<Person> Data;                                       // list로 Data 선언
 list<Person>::iterator iter;                             // list의 내부 참조자 변수만듬
 while(1)
 {
  MainMenu();
  cin >> Select;
  switch(Select)
  {
  case 1:       //입 력
   Person temp;
   cout << "이  름 : ";
   cin >> temp.Name;
   cout << "나  이 : ";
   cin >> temp.Age;
   cout << "I    D : ";
   cin >> temp.ID;
   cout << "P    W : ";
   cin >> temp.PW;
   Data.push_back(temp);                           //데이터 밀어넣기
   cout <<"입력완료"<<endl;
   break;
  case 2:       //출 력
   if( Data.empty() )
   {
    cout<<"등록된 정보가 없다"<<endl;
    continue;
   }
   else
   {
    for(iter=Data.begin() ; iter != Data.end() ; iter++)                        //Data.begin() -> 시작점,   Data.end() ->끝점
    {
     cout<<"이  름:"<<(*iter).Name<<endl;;                                 // iter로 데이터 접근
     cout<<"나  이:"<<(*iter).Age<<endl;
     cout<<"I    D:"<<(*iter).ID<<endl;
     cout<<"P    W:"<<(*iter).PW<<endl;
    }
    cout<<"출력완료"<<endl;
   }
   break;
  case 3:       //나이순 정렬
   if( Data.empty() )                                                               //Data.empty() ->비었으면 false, 있으면 true
   {
    cout<<"정렬할 정보가 없다"<<endl;
    continue;
   }
   else
   {
    Data.sort(Comp);   //
    cout<<"나이순 정렬완료"<<endl;
   }
   break;
  case 4:       //검색삭제
   if(SearchData() == 1)  //이 름
   {
    char strname[256];
    cout << "이 름 : ";
    cin >> strname;

    for(iter = Data.begin() ; iter != Data.end() ; )
    {
     if( !strcmp((*iter).Name, strname) ) //같은게 있으면
     {
      iter = Data.erase(iter);                                                      //Data.erase() ->선택부분 삭제
      cout<<"삭제 완료"<<endl;
     }
     else
      iter++;
    }
   }
   else if(SearchData() == 2) //아이디
   {
    char strid[256];
    cout<<"I   D : ";
    cin>>strid;
    for(iter = Data.begin() ; iter != Data.end() ; )
    {
     if( !strcmp( (*iter).ID, strid) ) //같은게 있으면
     {
      iter = Data.erase(iter);
      cout<<"삭제 완료"<<endl;
     }
     else
      iter++;
    }
   }
   break;
  case 5:       //전체삭제
   if( Data.empty() )
    cout<<"등록된정보가없다"<<endl;
   else
   {
    Data.clear();                                                         //Data.clear() -> 전체 삭제
    cout<<"전체삭제완료"<<endl;
   }
   break;
  case 6:       //종료
   Data.clear();
   cout<<"프로그램종료함"<<endl;
   return;
   break;
  }
 }

}
void MainMenu()
{
 cout << "--------------" <<endl;
 cout << "     List     " << endl;
 cout << "--------------" <<endl;
 cout << "1.입      력" << endl;
 cout << "2.출      력" << endl;
 cout << "3.나이순정렬"<<endl;
 cout << "4.검색 삭제" << endl;
 cout << "5.전체 삭제" << endl;
 cout << "6.종     료" << endl;
 cout << "--------------" <<endl;
 cout << "선     택 : ";
}
int SearchData()
{
 int i;
 cout << "검색할 목록 선택" << endl;
 cout << "1.이 름  2.I  D" << endl;
 cout << "선택 : ";
 cin >> i;
 return i;
}

'C++ > STL-list' 카테고리의 다른 글

list  (0) 2012.08.13
« PREV : 1 : ··· : 71 : 72 : 73 : 74 : 75 : 76 : 77 : NEXT »