c++ - C++ 中的稳定排序

标签 c++ stable-sort

我正在尝试使用 stable_sort 对指针 vector 进行排序

某个类(class)。我有这样的代码:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

class B
{
    public :
        B(int y, int j) {x = y, r = j;};

        void getVal() {cout << x << endl; };

        int x;
        int r;
};


bool compareB(B* b1, B* b2)
{
    return b1->getVal() < b2->getVal();
}

int main()
{
    B b1(3, 4), b2(-5, 7), b3(12, 111);

    vector<B*> myVec;
    myVec.push_back(&b1);
    myVec.push_back(&b2);
    myVec.push_back(&b3);

    std::stable_sort(myVec.begin(), myVec.end(), compareB);
    for (size_t size = 0; size < myVec.size(); ++size)
    {
        myVec[size]->getVal();
    }

    return 0;
}

然而,我在编译时遇到了一个愚蠢的错误:

“错误:'void' 和 'void' 类型的无效操作数到二进制 'operator<' 返回 b1->getVal() < b2->getVal();"

有人可以帮助我吗?

最佳答案

问题在于

void getVal() {cout << x << endl; };

它返回 void而不是一些值(value)。

当你在 return b1->getVal() < b2->getVal(); 中使用它时归结为 return void < void;这不会编译。

你应该可以把它改成

int getVal() { return x; };

关于c++ - C++ 中的稳定排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32360266/

相关文章:

c++ - CUDA 中的随机播放指令不起作用

c++ - 如何为 ATmega8 微 Controller 实现自己的刷机软件

c++ - 什么时候对标量调用 stable_sort()?

ruby - 如何进行稳定排序?

c++ - http ://tinyurl. com/pzpyvb9 处的无锁堆栈的性能数据是否真实?

c# - 将大型 MFC 应用程序迁移到 WPF/.NET 有哪些技术?

c++ - 中断接收套接字

delphi - 向 TList 和 TStringList 添加稳定排序的简单方法

c - 如何使用 qsort 保持排序不变

javascript - Array.sort() 方法在不同浏览器中的稳定性如何?