C++ 结构数组的排序和二进制搜索
这是我的密码C++ 结构数组的排序和二进制搜索,c++,sorting,binary-search,C++,Sorting,Binary Search,这是我的密码 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->da
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++;
}
}
第二行开始排序
20130101 Wii 0 ....
第二个问题是二进制搜索
我的代码有什么错误吗
错误消息显示
bool(const Data*,const Data*)无法将arg1“const int”转换为“const Data*”请发布所有代码好吗? 目前,您的结构的指针没有分配内存,如果没有所有代码,我们无法获得与您相同的结果 错误消息显示 布尔(常量数据*,常量数据*)无法将arg1“常量int”转换为“常量数据*” 应该出现,因为您可以向函数传递“const int”而不是“const Data*”
p_data[0]
被错误地初始化(可能是随机值),这将使元素具有随机int
asdate
和空字符串asexchange
binary_search
()的值设置为20140212
,而不是包含该日期的Data
对象(我猜您希望找到该日期对应的对象)//创建一个目标日期为的临时变量
数据tmp;
tmp.date=20140212;
//搜索它
bool yes=二进制搜索(P_data.begin()+1,P_data.end(),&tmp,comp2);
也可以考虑将<代码>日期>代码>属性改为“代码>未签名< /代码>以避免奇怪的负值。
我认为这更适合评论部分。我同意你的观点,尽管我实际上没有赢得足够的声誉来发表评论。但是我想帮助他,今天下午我将去掉这个答案,以确定他是谁。读过了。@t.m20130101 Wii 0 ....