[問題] 關於vector中使用lower_bound的問題

看板C_and_CPP作者 (為了蘿莉而戰)時間14年前 (2010/06/10 13:02), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) 遇到的問題: (題意請描述清楚) 如何對某結構vector使用lower_bound? 假設想找vector<B>裡的value = 25是第幾筆資料該怎麼實作? 目前想到的是以下的做法 typedef struct BB { long index; double value; bool operator < (const BB& rhs)const { return this->value < rhs.value; } bool operator < (const double rhs)const { return this->value < rhs; } }B; // .... // std::vector<B> aset; for(long i = 1 ; i <= 20 ; i++) { B b; b.index = i; b.value = (double)(i*i); aset.push_back(b); } //補充一下,如果我想要讓他能夠判斷double就好,改成以下的樣子 double v; v = 25.0; std::vector<B>::iterator iterB = std::lower_bound(aset.begin(), aset.end(), v); 編譯時發生錯誤 error C2784: 'bool std::operator <(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : 無法由 'const double',針對 'const std::reverse_iterator<_RanIt> &' 推算 樣板 引數 error C2784: 'bool std::operator <(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)' : 無法由 'const double',針對 'const std::pair<_Ty1,_Ty2> &' 推算 樣板 引數 ...等6個錯誤訊息 但如果換成release編譯又會過了,而且結果好像沒有特別的問題。 請問各位該如何讓他在debug下也能順利通過?? 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) VS2005 補充說明: 另外,假設std::lower_bound找尋的值不在vector中,他回傳的iterator一定會是找尋的值之後第一個值嗎?? 例如:vector裡面有 1,4,9,16,25,36,49 找尋 3就會回傳4 ; 找尋 20 就會回傳25 ; 找尋31就會回傳36...等? 感謝各位提示了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.130.59.56

06/10 14:58, , 1F
bool operator < (const BB& rhs)const 改成這樣
06/10 14:58, 1F

06/10 15:01, , 2F
對於補充說明 就是你想的那樣
06/10 15:01, 2F
※ 編輯: tiria 來自: 220.130.59.56 (06/10 18:45)

06/10 18:45, , 3F
感謝樓上回答,確定可以了,但我想換個問題
06/10 18:45, 3F

06/10 18:46, , 4F
如果我只想判斷double而已,該要怎麼改呢?
06/10 18:46, 4F
文章代碼(AID): #1C477KaI (C_and_CPP)