加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c排序指针错误的向量

发布时间:2020-12-16 10:23:27 所属栏目:百科 来源:网络整理
导读:我有一个矢量vec,每次我在其中放入一个元素时我需要对它进行排序 所以当我把第一个升级*放在矢量中时我没有问题 但是当我在其中放入第二个Upgrade *并调用sort例程时,我遇到了运行时错误 这是我每次插入时放置元素和调用排序的方式 std::vectorUpgrade* stac
我有一个矢量vec,每次我在其中放入一个元素时我需要对它进行排序

所以当我把第一个升级*放在矢量中时我没有问题

但是当我在其中放入第二个Upgrade *并调用sort例程时,我遇到了运行时错误

这是我每次插入时放置元素和调用排序的方式

std::vector<Upgrade*> stack = getStack();

stack.push_back(element);

std::sort(stack.begin(),stack.end(),CostBenefitUpgradeOrder());

这是我的比较器

struct CostBenefitUpgradeOrder {
    bool operator ()(const Upgrade * u1,const Upgrade * u2) const {

        const UpgradeType upgradeType1 = u1->getUpgradeType();
        const UpgradeType upgradeType2 = u2->getUpgradeType();

        int price1 = PriceUtil::getPrice(upgradeType1);
        int price2 = PriceUtil::getPrice(upgradeType2);

        if (price2 < price1)
            return true;
        else
            return false;
    }
}

这是错误

我注意到它只发生在我在调试模式下执行程序时!

解决方法

您的比较功能已损坏.对于u1< u1都不能返回true的谓词. u2和u2< U1. 将return语句替换为return u1< U2;如果你只需要一些快速测试的东西. 此外,您确定需要使用矢量吗?除非你需要将指针存储在连续的内存中,否则最好使用std :: set而不是使用适当的比较器.该集将在每次插入/删除后保持元素排序. 此外,由于您正在使用原始指针,如果您使用new分配对象,请确保在从容器中删除元素之前删除.更好的是,使用std :: set< std :: unique_ptr< Upgrade>,CostBenefitUpgradeOrder>相反,不必担心删除分配的内存.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读