【问题标题】:How to sort vector of objects without "sort"如何在没有“排序”的情况下对对象向量进行排序
【发布时间】:2018-01-15 20:51:26
【问题描述】:

那么我该怎么做呢?我尝试使用友元函数,重载运算符,但似乎无法完成。

class shop {
 int price;
 string name;
 string model;
 public:
    shop () {
        price =0;
        name = " NULL" ;
        model = " NULL " ;
    }

    shop ( string n , string m , int p ) {
        name = n;
        model = m;
        price = p;
    }

    void display () {
        cout<<"Name : " << name <<endl;
        cout<<"Model : "<<model<<endl;
        cout<<"Price : "<<price<<endl;
    }   
};

如何按价格排序?

for ( int i = 1 ; i<=products ; i++) {
    cin.ignore();
    cout<<"Name  "<< i << ": ";
    getline(cin,n); 
    cout<<"Model   "<< i << ": ";
    cin>>m;
    cout<<"Price "<< i << ": ";
    cin>>p[i];

    e[i] =  new shop(n,m,p[i]);
}

我有一个尝试排序的向量。我想不排序,因为我认为我没有为这个方法正确声明向量。

【问题讨论】:

  • 您可以使用自定义比较器 std::sort。
  • 没有腿怎么走路?如何在没有计算机的情况下运行程序?没有std::sort如何排序?这些问题没有用。只需使用专为解决您的问题而制作的工具即可。
  • 有大量使用数组的排序示例。向量可以使用数组表示法来访问元素。如果您不想使用默认的std::sort,或带有自定义比较器的std::sort,您可以使用qsort 或自己编写。
  • @jodag,manni66 可以根据for ( int i = 1 ; i&lt;=products ; i++) 做出相当不错的猜测。 sebbyz 可能在vector 的开头分配了一个额外的空槽,但这更有可能是一个单独的错误。 Sebbyz、向量和数组是原点 0。它们从 0 开始计数,而不是 1。这意味着如果您没有考虑原点零,p[products] 可能超出范围。

标签: c++ class sorting object vector


【解决方案1】:

如果您不想使用任何内置排序功能,则必须手动实现。

// You can use this bubble sort...

for ( int i = 1 ; i<=products ; i++) {    
    for(int j = 1; j <= (products-i+1); j++){ 
        if(e[i].price > e[j].price){
              swap(e[i], e[j]);
        }
    }
}

它的复杂度是O(N^2)。当产品数量庞大时,这需要很长时间。您可以使用其他复杂的算法O(Nlog(N)),例如合并排序、快速排序等,以使其更快。

【讨论】:

  • 请阅读comments...
  • 但我不能使用私人约会
  • for (int i = 1 ; i
  • 我这样做了,但它没有交换我的最后一个对象
  • 那么你就可以换两个店取一个额外的临时变量了。
【解决方案2】:

这是用 2 对向量进行排序的方法:

for (int i = 0; i < vec.size(); i++) {
    for (int j = i; j < (vec.size()); j++) {
        if (vec[i] > vec[j]) {
            std::swap(vec[i], vec[j]);
        }
    }
}

【讨论】:

    猜你喜欢
    • 2020-01-25
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 2017-10-14
    • 2023-03-20
    • 2019-02-17
    相关资源
    最近更新 更多