Re: [問題] 統計string中單字出現的次數

看板C_and_CPP作者時間13年前 (2010/09/06 02:14), 編輯推噓1(108)
留言9則, 3人參與, 最新討論串2/4 (看更多)
用兩個set.. std::set< std::pair<std::string, int>* > 第一個set依照字串排序 第二個set依照count排序 input進來全部丟進第一個set計算count 輸入完之後把第一個set的內容全部丟到第二個set 第二個set的end()就是答案.. 這種東西...基本上就是砍一半的bimap 如果可以用library的話 boost::bimap或是boost::multi_index 都是不錯的選擇.. 前者比較好學 介面比較明確  後者比較泛用 ※ 引述《jehovah (Lucius)》之銘言: : 小弟不才..又來求教一練習題 : 題目要求由使用者輸入字串 : 並輸出各單字中出現最頻繁者和次數 : 例如 how, now now brown cow : 則得到 now : 2 : 我目前只會硬幹將單字丟入vector中, 並將每個單字與所有單字做比對 : string s; : vector<string> v; : while(cin>>s) : v.push_back(s); //vector存各個單字 : int* cptr = new int[v.size()](); //array存各個單字的次數 : for(vector<string>::size_type ix=0; ix!=v.size(); ++ix) : for(vector<string>::size_type iy=0; iy!=v.size(); ++iy) : { : if(v[ix] == v[iy]) : cptr[ix]++; : } : 這樣子是能記錄各個單字的次數 how, now now brown cow : cptr[0] [1] [2] [3] [4] : 1 2 2 1 1 : 再從次數找最大值, 之後用index代回vector得到單字.. : 如果單字一樣就擇其一輸出 : 只是這樣子比對複雜度是O(n^2), 輸入多一點就很沒效率 : 完全是硬湊出來的解法@@ : 能否提供我一些方向或提示..該怎麼思考這樣的問題比較好? : 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.136.184.87

09/06 03:01, , 1F
喔對了 如果有hash_set可以用 第一個set應該用hash
09/06 03:01, 1F

09/06 03:02, , 2F
multi_index本身就有hash_index就是了XD
09/06 03:02, 2F

09/06 03:12, , 3F
set::end() 回傳的迭代器不可取值的喔~
09/06 03:12, 3F

09/06 03:17, , 4F
啊..我是要寫back() 囧 不過set好像也沒back()
09/06 03:17, 4F

09/06 03:17, , 5F
總之就是最後count最大的那個element~"~
09/06 03:17, 5F

09/06 03:17, , 6F
*(--end())...
09/06 03:17, 6F

09/06 03:18, , 7F
再不然反過來排 那begin()就是答案啦XD
09/06 03:18, 7F

09/06 03:22, , 8F
啊.....突然想到最後一個element不就是rbegin()嗎 我昏了
09/06 03:22, 8F

09/06 10:56, , 9F
大家都很常忘記 rbegin
09/06 10:56, 9F
文章代碼(AID): #1CWzuSMs (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1CWzuSMs (C_and_CPP)