[問題] 從幾筆資料中挑出資格符合者

看板C_and_CPP作者 (123)時間15年前 (2010/08/31 08:12), 編輯推噓2(2023)
留言25則, 8人參與, 最新討論串1/2 (看更多)
假如現在有兩筆男生和女生的身高體重資料 要從男生裡面挑三個出來,從女生裡面挑兩個出來 挑選標準是身高最矮者,如果身高一樣矮則以體重來比較,若體重又一樣則選編號較小者 舉例: 編號01~06是男生,07~12是女生 編號 01 02 03 04 05 06 07 08 09 10 11 12 身高 177 168 167 180 168 168 162 155 172 158 165 158 體重 55 60 65 63 62 58 47 48 49 45 45 45 所以結果會挑選出男生:02 03 06 女生:08 10 (編號10比編號12小,所以選編號10) 當遇到這樣的問題時,我是想先個別以vector來儲存資料 例如:vectorM[0]表示01號男生,vectorM[5]表示06號男生 vectorW[0]表示07號女生,vectorW[5]表示12號女生 vectorMh[0]是01號男生的身高,vectorMh[5]是06號男生的身高 vectorMw[0]是01號男生的體重,vectorMw[5]是06號男生的體重 vectorWh[0]是07號女生的身高,vectorWh[5]是12號女生的身高 vectorWw[0]是07號女生的體重,vectorWw[5]是12號女生的體重 以男生而言 先比較vectorMh,原本vectorMh的資料依序是 177 168 167 180 168 168 我是想以sort ( vectorMh.begin(), vectorMh.end() ) 來排出順序大小 這樣的話,vectorMh中的資料排序會變成 167 168 168 168 177 180 此時,167一定會被選中,但是三個168必須比較 體重 ,再從中選出兩個 問題來了,我要怎麼知道身高168的人是哪三位呢? 我只知道必須用for loop 去把所有男生的身高資料掃一次,才能抓出誰是身高168 但是當資料數量非常多的時候,這樣去掃會變得非常浪費時間 請問遇到這樣的問題時,有什麼特別的方法可以節省程式的執行時間呢? 感恩~~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.3.39

08/31 17:25, , 1F
用個struct或class把資料包起來 然後自定義sort
08/31 17:25, 1F

08/31 17:45, , 2F
struct,class +1
08/31 17:45, 2F

08/31 18:27, , 3F
自定義sort是什麼意思呢?
08/31 18:27, 3F

08/31 18:46, , 4F
要排序的意思..
08/31 18:46, 4F

08/31 19:53, , 5F
用stable sort,依序排編號,體重,身高個一次
08/31 19:53, 5F

08/31 19:53, , 6F
不然就是自定義sort的函式
08/31 19:53, 6F

08/31 19:54, , 7F
想像現在有「人」要去排隊, 每個人擁有「id」、「身高
08/31 19:54, 7F

08/31 19:55, , 8F
」、「體重」這些屬性,「人」要視為一個整體不可分割
08/31 19:55, 8F

08/31 19:56, , 9F
你把他分開儲存,就已經增加了排序的難度,sort有兩種
08/31 19:56, 9F

08/31 19:57, , 10F
版本,第一個版本就是你用的那個,是用運算子 < 來比
08/31 19:57, 10F

08/31 19:57, , 11F
較內建型別變數的大小,還有另外一個版本,是提供你自
08/31 19:57, 11F

08/31 19:58, , 12F
訂型態的比較規則,用來決定一個「人」怎樣才算是小於
08/31 19:58, 12F

08/31 19:58, , 13F
另外一個「人」
08/31 19:58, 13F

08/31 20:00, , 14F
總結:1.predicate 2.stable sort
08/31 20:00, 14F

08/31 20:02, , 15F
不一定要stable sort啦~> < 也可以自訂operator <
08/31 20:02, 15F

08/31 20:07, , 16F
覆寫class的operator<嗎?那算第3種方法
08/31 20:07, 16F

08/31 20:08, , 17F
不過跟自定義sort函式感覺差不多耶。
08/31 20:08, 17F

08/31 20:13, , 18F
其實如果第二個版本是用functor,再加上自訂<, inline
08/31 20:13, 18F

08/31 20:14, , 19F
比較容易被接受
08/31 20:14, 19F

08/31 20:14, , 20F
不過不太建議把< 寫成member啦
08/31 20:14, 20F

08/31 20:23, , 21F
請問哪個東西要寫成inline?
08/31 20:23, 21F

08/31 20:45, , 22F
functor 提供的 () member function / operator <
08/31 20:45, 22F

08/31 20:50, , 23F
請問有不使用struct或class的方法嗎? 目前還不太會用 QQ
08/31 20:50, 23F

08/31 21:06, , 24F
struct很容易的 查一下就會了
08/31 21:06, 24F

08/31 21:15, , 25F
其實用 nth_element 會更快...
08/31 21:15, 25F
文章代碼(AID): #1CVBbaRX (C_and_CPP)
文章代碼(AID): #1CVBbaRX (C_and_CPP)