这是我的代码
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&#39; const int&#39;至&#39; const数据*&#39;
答案 0 :(得分:0)
关于第一行的打印,可能是第一个元素,即P_data[0]
被错误地初始化(可能是随机值),这会使元素具有随机int
作为date
,空字符串为exchange
。
您收到的错误是指binary_search
(http://www.cplusplus.com/reference/algorithm/binary_search/)值为20140212
而不是包含该日期的Data
对象(I猜猜你想找到这个日期的对象。
您应该将搜索代码修改为:
// 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
,以避免出现奇怪的负值。
答案 1 :(得分:-1)
您能否发布所有代码? 目前你的结构指针没有分配内存,如果没有你的代码,我们就无法得到与你相同的结果。
应该出现错误消息显示
bool(const Data *,const Data *)无法将arg1'const int'转换为'const Data *'
因为你可以将'const int'而不是'const Data *'传递给你的函数。