基于属性c ++对对象数组进行排序

时间:2012-11-01 12:06:11

标签: c++ class sorting

  

可能重复:
  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();
}

我想知道如何发送数组b并对其进行排序。此外,我将询问有关析构函数以及将其放入代码的位置。

2 个答案:

答案 0 :(得分:0)

要在分拣时交换鱼,你应该写这个

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

您正在根据鱼的价格进行分类,但这是应该整理的整条鱼。

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

答案 1 :(得分:0)

如果你想按给定元素对数组进行排序,那么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]等等。