[英]How to sort an array of structs with std::binary_search or std::sort
[英]sort and binary_search on array of struct
這是我的代碼
typedef struct Data{
int date;
string currency;
string exchange;
float low;
float high;
long long int daily_cap;
}Data;
bool comp2(const Data *data1, const Data *data2){
return (data1->date < data2->date);
}
bool comp1(Data *data1, Data *data2){
if (data1->date != data2->date)
return (data1->date < data2->date);
if (data1->currency != data2->currency)
return (data1->currency < data2->currency);
else
return (data1->exchange < data2->exchange);
}
int main()
{
ifstream infile("test.txt");
Data tmp;
vector<Data*> P_data;
while (infile){
Data *tmp = new Data();
infile >> tmp->date;
infile >> tmp->currency;
infile >> tmp->exchange;
infile >> tmp->low;
infile >> tmp->high;
infile >> tmp->daily_cap;
P_data.push_back(tmp);
}
sort(P_data.begin(), P_data.end(), comp1);
// bool yes = binary_search(P_data.begin()+1, P_data.end(), 20140212, comp2);
int c = 0;
for (int i = 0; i<= 20; ++i){
cout << P_data[i]->date << " " << P_data[i]->exchange << " " << c << endl;
c++;
}
}
第一個問題是為什么要排序后
第一行是
-842150451 0
然后第二行開始排序
20130101 Wii 0 ....
第二個問題是binary_search
我的代碼有什么問題嗎?
錯誤消息表明
bool(const Data *,const Data *)無法將arg1'const int'轉換為'const Data *'
關於第一行的打印,可能是第一個元素(即P_data[0]
被錯誤地初始化(可能是隨機值),這將使該元素具有一個隨機的int
作為date
和一個空字符串作為exchange
。
您收到的錯誤是為binary_search
( http://www.cplusplus.com/reference/algorithm/binary_search/ )賦予值20140212
而不是包含該日期的Data
對象(我猜您想找到此日期的對象。
您應該將搜索代碼修改為:
// Create a temp variable which target date
Data tmp;
tmp.date = 20140212;
// Search for it
bool yes = binary_search(P_data.begin()+1, P_data.end(), &tmp, comp2);
另外,您可能需要考慮將date
屬性更改為unsigned
以避免奇怪的負值。
您能發布所有代碼嗎? 當前,您的結構的指針未分配內存,如果沒有所有代碼,我們將無法獲得與您相同的結果。
錯誤消息表明
bool(const Data *,const Data *)無法將arg1'const int'轉換為'const Data *'
應該出現是因為您可能將'const int'而不是'const Data *'傳遞給函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.