【问题标题】:Linked List sorting链表排序
【发布时间】:2014-08-12 08:36:42
【问题描述】:

我希望能够通过另一种方法(getPrice)进行排序,我的代码是:

void gameListType::sortAscending() {
    nodeType<gameType> *current;
    nodeType<gameType> *next;
    nodeType<gameType> *tempcurrent;
    nodeType<gameType> *tempnext;
    nodeType<gameType> *tempprev;
    nodeType<gameType> *prev;
    prev = first;
    current = first->link;
    next = current->link;
    while ( current->link !=NULL){
        if (current->info.getPrice() > next->info.getPrice())
        {
            tempcurrent =current;
            tempprev = prev;
            tempnext = next;
            tempcurrent ->link = tempnext->link;
            tempnext ->link= tempprev->link;
        }
        prev = prev ->link;
        current = current ->link;
        next = next->link;
    }
}

如何更改我的代码,以便我可以根据 getPrice() 方法对节点进行排序?

【问题讨论】:

  • 也许你的标签有误? @edit 更好;)
  • 您是否考虑过使用std::list&lt;&gt; - 它有一个sort 成员函数,该函数接受一个比较对象,让您可以自定义排序条件...参见here

标签: c++ linked-list iterator


【解决方案1】:

使用谓词进行排序。

void gameListType::sort(std::function<bool(gameType, gameType)> predicate)
{
    nodeType<gameType> *current;
    nodeType<gameType> *next;
    nodeType<gameType> *tempcurrent;
    nodeType<gameType> *tempnext;
    nodeType<gameType> *tempprev;
    nodeType<gameType> *prev;
    prev = first;
    current = first->link;
    next = current->link;
    while ( current->link !=NULL) {
        if (predicate(current->info, next->info))
        {
            tempcurrent =current;
            tempprev = prev;
            tempnext = next;
            tempcurrent ->link = tempnext->link;
            tempnext ->link= tempprev->link;
        }
        prev = prev ->link;
        current = current ->link;
        next = next->link;
    }
}

// sort ascending
sort([](gameType const& t1, gameType const& t2) {return t1.getPrice() > t2.getPrice();});

// sort desscending
sort([](gameType const& t1, gameType const& t2) {return t1.getPrice() < t2.getPrice();});

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 2011-05-26
    • 2021-07-22
    相关资源
    最近更新 更多