假设我有一个看起来像这样的类:
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是私有的
答案 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)
您将使用自定义比较器对象,该对象可根据name
,price
或quantity
进行排序。
这是std::sort
功能的一部分。
答案 3 :(得分:0)
std::sort
算法有三个参数 - first,last和 comparator 。
比较函数对象,取两个相同类型的值 比范围中包含的那些,如果第一个参数返回true 在特定的严格弱排序中的第二个参数之前 它定义,否则为假。