0

可能的重复:
c++ sort with structs

#include <iostream>
using namespace std;

class fish{
private:
    int size;
    int price;
public:
    fish()
    {
        size=0;
        price=0;
    }
    void set_price(int x)
    {
        price=x;
    }
    void set_size(int g)
    {
        size=g;
    }
    int get_size()
    {
        return size;
    }
    int get_price()
    {
        return price;
    }
    void display()
    {
        cout<<" Fish price is "<<price<<" Fish size is "<<size<<endl;
    }
    void sort(fish h[5])
    {
        for (int o=0;o<=5;o++)
        {
            fish temp;
            temp.set_price(0);

            if (h[o].get_price()>h[o+1].get_price())
            {
                temp.get_price()=h[o].get_price();
                h[o].get_price()=h[o+1].get_price();
                h[o+1].get_price()=temp.get_price();

            }
        }
    }
};
void main()
{
    fish a;
    fish b[5];
    a.set_size(500);
    a.set_price(2);
    a.display();

    for (int i=0;i<=5;i++)
    {
        b[i].set_size(i*2);
        b[i].set_price(i*100);
    }
    for (i=0;i<=5;i++)
        b[i].display();
}

我想知道我如何发送 arrayb并对其进行排序。我还想询问析构函数以及我可以将它们放入我的代码中的位置。

4

2 回答 2

1

如果您希望按给定元素对数组进行排序,则 STL 容器应该没问题,否则我会使用此方法

template<class T>
void quickSort(T * elements, unsigned int first, unsigned int last)
{
    if(first < last)                        //make sure params are in bounds
    {
        T t = elements[first];              //t is PIVOT
        unsigned lastLow = first;           //create last low item
        unsigned i;                         //used for loop/swapping
        for(i = first + 1; i <= last; i++)  //run through entire bounds
            if(elements[i] < t)             //if elements is less than Low
            {
                          << " adding one onto lastLow...\n";
                lastLow++;                  //move lastLow up one
                swap(elements,lastLow, i);  //swap lastlow and i
            }
        swap(elements,first, lastLow);      //swap first and lastlow
        if(lastLow != first)                //if lastlow is not first element
            quickSort(elements, first, lastLow - 1);
        if(lastLow != last)                 //if lastlow is not last element
            quickSort(elements, lastLow + 1, last);
    }
}

这是一个常用的快速排序函数,用于对数组进行排序。只需替换正确的变量来表示您的数据例如 T * 元素变为 Fish * stuff, T t = Elements[first] 变为 double price = stuff[first] 等等。

于 2012-11-01T13:38:10.397 回答
0

要在排序时交换鱼,你应该写这个

fish tmp = h[o];
h[o] = h[o+1];
h[o+1] = tmp;

您正在根据鱼的价格进行排序,但应该对整条鱼进行排序。

在您的另一个问题上,此代码中不需要析构函数。你的鱼类不需要做任何“清理”,所以它不需要析构函数。

于 2012-11-01T12:32:02.093 回答