|
smleelms 님이 쓰신 글 :
: 헉스... 저는 저장하는 데이터가 많지 않아서.. 그냥 벡터크기만큼 for문으로 돌려서 찾습니다.
: 그리고 벡터에 search관련 method가 있는지는 잘 모르겠습니다..
:
: 전혀 도움이 안된듯...
:
: 하안인 님이 쓰신 글 :
: : smleelms 님이 쓰신 글 :
: : : 저장하실려고 하는 데이터를 구조체로 정의하신후 vector나 list의 데이터형을 정의하신 구조체로 지정하고,
: : : 이후 정의된 구조체를 그냥 일반 데이터형처럼 vector나 list에 넣고, 빼고, 읽고 하시면 됩니다.
: : :
: : : 그럼...
: :
: : 감사합니다.
: :
: : struct ss{
: : int id;
: : String meth1;
: : String meth2;
: : ...}
: :
: : vector <ss> vdata;
: : ss data;
: : data.id = 2001;
: : data.meth1 = "test";
: : data.meth2="test2";
: : vdata.push_back(data);
: :
: : 이렇게 저장하고
: : id가 3000인것을 검색하려면 어떻게 하나요.
struct ss
{
int id;
String meth1;
String meth2;
bool operator == (int _id) const //stl find()로 찾을 때 필요
{
return (_id==id);
}
bool operator < (const ss& other) const //연관 컨테이너에서 정렬 시 필요
{
return (id<other.id);
}
};
struct SearchSS:public binary_function<ss,int,bool> //find_if()로 찾을 때 필요
{
bool operator ()(const ss& s,int id)
{
return (s.id==id);
}
};
//vector 사용
void __fastcall TForm1::btnVectorClick(TObject *Sender)
{
vector<ss> vdata;
ss data;
data.id = 2001;
data.meth1 = "test2001";
data.meth2="test2001_2";
vdata.push_back(data);
data.id = 3000;
data.meth1 = "test3000";
data.meth2="test3000_2";
vdata.push_back(data);
data.id = 2002;
data.meth1 = "test2002";
data.meth2="test2002_2";
vdata.push_back(data);
String temp;
vector<ss>::iterator it = find(vdata.begin(),vdata.end(),3000);
if(it!=vdata.end())
{
temp.printf("id:%d meth1:%s meth2:%s",it->id,it->meth1,it->meth2);
Memo1->Lines->Add(temp);
}
it = find_if(vdata.begin(),vdata.end(),bind2nd(SearchSS(),3000));
if(it!=vdata.end())
{
temp.printf("id:%d meth1:%s meth2:%s",it->id,it->meth1,it->meth2);
Memo1->Lines->Add(temp);
}
}
//---------------------------------------------------------------------------
//set 사용
void __fastcall TForm1::btnSetClick(TObject *Sender)
{
set<ss> vdata;
ss data;
data.id = 2001;
data.meth1 = "test2001";
data.meth2="test2001_2";
vdata.insert(data);
data.id = 3000;
data.meth1 = "test3000";
data.meth2="test3000_2";
vdata.insert(data);
data.id = 2002;
data.meth1 = "test2002";
data.meth2="test2002_2";
vdata.insert(data);
String temp;
set<ss>::iterator it = vdata.find(data);
if(it!=vdata.end())
{
temp.printf("id:%d meth1:%s meth2:%s",it->id,it->meth1,it->meth2);
Memo1->Lines->Add(temp);
}
it = find(vdata.begin(),vdata.end(),3000);
if(it!=vdata.end())
{
temp.printf("id:%d meth1:%s meth2:%s",it->id,it->meth1,it->meth2);
Memo1->Lines->Add(temp);
}
it = find_if(vdata.begin(),vdata.end(),bind2nd(SearchSS(),3000));
if(it!=vdata.end())
{
temp.printf("id:%d meth1:%s meth2:%s",it->id,it->meth1,it->meth2);
Memo1->Lines->Add(temp);
}
}
//map사용
//---------------------------------------------------------------------------
void __fastcall TForm1::btnMapClick(TObject *Sender)
{
map<int,ss> vdata;
typedef map<int,ss>::value_type value_type;
ss data;
data.id = 2001;
data.meth1 = "test2001";
data.meth2="test2001_2";
vdata.insert(value_type(data.id,data));
data.id = 3000;
data.meth1 = "test3000";
data.meth2="test3000_2";
vdata.insert(value_type(data.id,data));
data.id = 2002;
data.meth1 = "test2002";
data.meth2="test2002_2";
vdata.insert(value_type(data.id,data));
String temp;
map<int,ss>::iterator it = vdata.find(3000);
if(it!=vdata.end())
{
temp.printf("id:%d meth1:%s meth2:%s",it->second.id,it->second.meth1,it->second.meth2);
Memo1->Lines->Add(temp);
}
}
|