用它中的类项排序向量

时间:2012-11-11 20:17:44

标签: c++

假设我有一个看起来像这样的类:

Class Items{
   private:
   float price;
   string name;
   float qunatity;
   public:
   getname(string nam){name=nam;}}

等...

我有一个由这个类项组成的向量,然后如何根据用户输入对它进行排序,就好像用户想要按名称对项进行排序,然后按名称排序等。

EDIT :: 好的,所以我有一个课程项目,并有一个课程库存:

Class Inventory{
      print();
      getdata();
      sort();
      static bool SORT_BY_NAME(const Item& i, const Item &j)}

然后我有一个Sang Geo为比较写的功能

static bool Inventory::SORT_BY_NAME(const Item & i, const Item & j) {                                                                                                                                                                                                       
  return i.name.compare(j.name) < 0;
}

然后我还有一个将使用不同的bool排序函数的排序函数

void Inventory::sorting(){
  int x;
  cout<<"How do you want to sort it: 1.name 2.ID 3.month";
  cin>>x;
  // vector<Item>::iterator it;                                                                                                   
  switch(x){
  case 1:
    std::sort(items.begin(), items.end(), Inventory::SORT_BY_NAME);
  }

但它说Items :: name是私有的

4 个答案:

答案 0 :(得分:2)

您只需要为要排序的每个字段编写比较函数,并根据用户输入选择正确的字段。

请参阅sort

答案 1 :(得分:2)

为了更好地说明如何在您的场景中使用std::sort,这是一个完整的示例,其中为您的班级中的三个字段定义了三个比较函数:

#include <algorithm>
#include <vector>
#include <iostream>
#include <sstream>
#include <string>

class Item{
    public:
        float price;
        std::string name;
        float quantity;
        static bool SORT_BY_NAME(const Item & i, const Item & j) {
            return i.name.compare(j.name) < 0;
        }
        static bool SORT_BY_PRICE(const Item & i, const Item & j) {
            return i.price < j.price;
        }
        static bool SORT_BY_QUANTITY(const Item & i, const Item & j) {
            return i.quantity < j.quantity;
        }
        std::string ToString(){
            std::stringstream ss;
            ss << name << ": $" << price << "; " << quantity;
            return ss.str();
        }
};

int main(int argc, char ** argv) {
    std::vector<Item> items;
    Item item1, item2, item3;

    item1.name = "Name1";
    item1.price = 2;
    item1.quantity = 3;

    item2.name = "Name2";
    item2.price = 3;
    item2.quantity = 1;

    item3.name = "Name3";
    item3.price = 1;
    item3.quantity = 2;

    items.push_back(item1);
    items.push_back(item2);
    items.push_back(item3);


    std::sort(items.begin(), items.end(), Item::SORT_BY_NAME);
    std::cout<<std::endl<<"By name:"<<std::endl;
    for(std::vector<Item>::iterator i = items.begin(); i != items.end(); ++i)
        std::cout<<i->ToString()<<std::endl;

    std::sort(items.begin(), items.end(), Item::SORT_BY_PRICE);
    std::cout<<std::endl<<"By price:"<<std::endl;
    for(std::vector<Item>::iterator i = items.begin(); i != items.end(); ++i)
        std::cout<<i->ToString()<<std::endl;

    std::sort(items.begin(), items.end(), Item::SORT_BY_QUANTITY);
    std::cout<<std::endl<<"By quantity:"<<std::endl;
    for(std::vector<Item>::iterator i = items.begin(); i != items.end(); ++i)
        std::cout<<i->ToString()<<std::endl;

}

答案 2 :(得分:1)

您将使用自定义比较器对象,该对象可根据namepricequantity进行排序。

这是std::sort功能的一部分。

答案 3 :(得分:0)

std::sort算法有三个参数 - first,last和 comparator

  

比较函数对象,取两个相同类型的值   比范围中包含的那些,如果第一个参数返回true   在特定的严格弱排序中的第二个参数之前   它定义,否则为假。