[問題] 關於vector中使用lower_bound的問題
( *[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
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
06/10 18:46, 4F