Re: [問題] 關於functor及find_if

看板C_and_CPP (C/C++)作者 (累人啊....)時間16年前 (2009/08/24 01:36), 編輯推噓0(006)
留言6則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《tyc5116》之銘言: : http://www2.nkfust.edu.tw/~u9314011/aaa.jpg
: 註:我圖改了,附上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
TruTPIn 到底是class 還是object ???
08/24 01:49, 1F

08/24 01:58, , 2F
TableA: list<int AID, string name>
08/24 01:58, 2F

08/24 01:58, , 3F
TableB: list<int BID, string name>
08/24 01:58, 3F

08/24 01:58, , 4F
Relation: list<int AID, int BID>
08/24 01:58, 4F

08/24 02:00, , 5F
我只能理解上面這個 DB 設計 @@" ...
08/24 02:00, 5F

08/24 08:28, , 6F
恩~~我Tru開頭的class只是用來將上面這樣的list包起來而已
08/24 08:28, 6F
文章代碼(AID): #1AaNu8oz (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 2 之 3 篇):
文章代碼(AID): #1AaNu8oz (C_and_CPP)