[英]c++ sort vector of pointers error
我有一個矢量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 < u2
和u2 < u1
,你不能有一個返回true
的謂詞。
將return語句替換為return return u1 < u2;
如果你只需要一些快速測試的東西。
此外,您確定需要使用vector
嗎? 除非你需要將指針存儲在連續的內存中,否則最好使用std::set
而不是使用適當的比較器。 該set
將在每次插入/刪除后保持元素排序。
此外,由於你使用原始指針,如果你使用分配對象的new
確保您delete
去除容器中的元素之前。 更好的是,使用std::set<std::unique_ptr<Upgrade>, CostBenefitUpgradeOrder>
而不必擔心刪除分配的內存。
您需要將“嚴格弱排序”(小於)運算符傳遞給std::sort
方法,並且該運算符必須為“有效”。
有效運算符<具有以下屬性:
您可以看到您的操作員在第一點失敗( CostBenefitUpgradeOrder(x, x) == true
,在您的情況下)(以及大多數其他點)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.