簡體   English   中英

對結構數組進行排序和binary_search

[英]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 *'

  1. 關於第一行的打印,可能是第一個元素(即P_data[0]被錯誤地初始化(可能是隨機值),這將使該元素具有一個隨機的int作為date和一個空字符串作為exchange

  2. 您收到的錯誤是為binary_searchhttp://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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM