
Re: [問題] 關於functor及find_if

: 註:我圖改了,附上access的示意圖
: 我想做出這樣的功能,類似資料庫,不過基於一些因素
: 不能依靠連結SQL的方式,只能用程式慢慢建立
: 所以依圖所以,就建立了6個class(三個是元件,三個是link list)
: 三個元件分別為甲乙丙,然後我現在可以透過find_if在Tc內找到某個符合條件的甲
: 但問題來了,我怎麼根據找到的這個"甲"(ex:要找到AID=5;BID=6的物件)
: 找出他裡面的元件A及B的屬性呢
: (eg:獲得AID=5的屬性,如Name,以及BID=6的屬性)
: 目前,我find_if的第三個參數是使用functor
: 而我目前所想到的方法,則是使用functor內部又有functor
: 當然我還沒實作啦,只是用想的似乎太過複雜,所以想請問各位前輩
: 不知道有沒有什麼比較簡潔的方法呢,麻煩說明一下,謝謝
: (寫完才發現寫乙丙好像是多餘的....XD)
:
: 如上,希望能夠知道有什麼方法可以作出如圖所示的功能
: 目前,我是想出繼承的方式,不過似乎也會更複雜...@@
: 推 yoco315:你幹嘛不直接用 map 存放 Ta 跟 Tb ? 08/24 00:04
: → tyc5116:因為relation可能不只有AID和BID而已 08/24 00:11
: → tyc5116:可能會更多,一方面也是還沒學到那,加上程式已經寫到 08/24 00:12
: → tyc5116:有一定規模了 08/24 00:12
: 推 zerodevil:用3次find_if就好啦 不要想太多 08/24 00:24
: 推 softwind:囧 你就 find find find 不就好了... 還是設計有要求? 08/24 00:25
: → tyc5116:3個find??可以大概說明一下嗎... 08/24 00:27
: → softwind:你都有能力在甲裡面找出 <AID,BID> 沒辦法在乙裡面找出 08/24 00:30
: → softwind:<AID,Name> 嗎??? 08/24 00:31
: 推 yoco315:嗯,我真的無法理解你在想什麼.. 08/24 00:43
不好意思~~我列出程式碼好了...@@
這段對應那個圖的話,就是relation那部份
class TPInData{
typedef vector<_Point> Pos;
public:
void SetTPID(int vID);
int& GetTPID();
void SetTransitionID(int vID);
int& GetTransitionID();
void SetArcType(int type);
int& GetArcType();
void Clear();
private:
int TPID;
int TransitionID;
int ArcType;
};
class TruTPIn{
typedef list<TPInData> Contents;
public:
TruTPIn();
TruTPIn(TPInData one_Row);
void add_Con_Data(TPInData new_Row);
TPInData& GetNowOB(int vTPID,int vTransitionID);
void Flow();
// 仿函式
class GetTPInDataOfOB{//找出符合搜尋條件的TPInData
public:
GetTPInDataOfOB (int vTPID,int vTransitionID):TPID(vTPID),
TransitionID(vTransitionID) {}
bool operator()(TPInData& lhs){
return (lhs.GetTPID() == TPID) &&
(lhs.GetTransitionID()==TransitionID);
}
private:
int TPID;
int TransitionID;
};
假設目前TruTPIn內有三組data,分別為
TPID(乙) TransitionID(丙)
2 5
7 10
3 6
以第一個舉例,我們要修改TPID=2的Name,及TransitionID=5的Name
依此類推,三個都改,所以我們寫在void Flow();內
void TruTPIn::Flow(){
for (list<TPInData>::iterator i=Load.begin();i!=Load.end();++i){
(不知道怎麼寫)
}
}
然後這是TableA的class
class TPData{
public:
TPData(int vID);
void SetID(int vID);
int& GetID();
void SetName(int vName);
int& GetID();
private:
int ID;
int Name;
};
class TruTPData{
typedef list<TPData> Contents;
public:
TruTPData();
TruTPData(TPData one_TP);
void add_TP(TPData new_TP);
TPData& GetNowOB(int vID);
//仿函式
class FindOBByID{
public:
FindOBByID (int val):_value(val){}
bool operator()(TPData& lhs){ return (lhs.GetID() == _value);}
private:
int _value;
};
private:
Contents Load;
};
主要是綠色那部份的程式碼不知道怎麼寫
那個部份解決的話,我想我問題應該也解決了
很謝謝S大,Y大及Z大肯花那麼多時間和我討論^^
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.143.155.152
→
08/24 01:49, , 1F
08/24 01:49, 1F
→
08/24 01:58, , 2F
08/24 01:58, 2F
→
08/24 01:58, , 3F
08/24 01:58, 3F
→
08/24 01:58, , 4F
08/24 01:58, 4F
→
08/24 02:00, , 5F
08/24 02:00, 5F
→
08/24 08:28, , 6F
08/24 08:28, 6F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章