c++ - 对结构数组(卡片)进行排序

标签 c++ sorting struct overloading

我正在制作一个二十一点游戏,并创建了一个数组来充当用户发牌的手牌。我希望能够对其进行排序,以便手按数字顺序排序,这样可以更简单地确定用户的手的类型。这是我的卡片结构:

struct ACard{
    int num;
    const char *pic;
};

我想按int num 对数组进行排序。我试图只使用简单的插入排序来完成排序,但我相信我需要重载运算符才能这样做,但我这样做时遇到了麻烦,因为我以前从未重载过这样的结构。到目前为止,这是我所拥有的:

        int i,j;
        ACard key;
        for(int i = 1; i < 5; i++){
            key = userHand[i].num;
            j = i - 1;

            while(j >= 0 && userHand[j].num > key){
                userHand[j + 1] = userHand[j];
                j = j - 1;
            }
            userHand[j + 1] = key;
        }

*注意 userHand 是我希望排序的 ACard 的数组

最佳答案

对于 STL 容器,您可以使用 std::sort 函数。前两个参数定义要排序的元素范围。第三个参数定义用于自定义元素比较的 LessThan 函数(您可以为此使用 lambda 表达式)。

std::vector<ACard> userHand; // or another stl container

// initialize userHand somehow

std::sort(userHand.begin(), userHand.end(),
    [](const ACard& left, const ACard& right)
    {
        return left.num < right.num;
    });

关于c++ - 对结构数组(卡片)进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47334667/

相关文章:

无法访问我的结构数组

c - 修改学生结构体数组 array c 中的元素

c++ - 是否可以访问从给定迭代器到 vector 的底层指针?

c++ - ifstream 不占用内存的最佳读取方式

C++ STL vector 排序——破坏和归零

java - 按 X 值对 List<Point> 进行排序的有效方法

ios - 在 iOS 的属性列表中排序键

c - 复制到共享内存中的结构时获取 "bus error"

c++ - 我可以从命令行构建 MFC 应用程序吗?

c++ - 二叉堆无匹配函数错误