我有以下排序算法,它將std::vector
的唯一armor_set
指針排序。通過我的排序算法的某些屬性,它會窒息併發生未定義的行爲,最終將比較有效的lhs
與rhs
這是一個nullptr
。std ::排序比較元素爲空
儘管多次移動算法,我一直無法辨別出問題。我覺得我錯過了一些關於這個算法如何工作的簡單規則。
任何幫助,將不勝感激。
std::vector<armor_set*> armor_sets;
//insertion of unique armor sets here
std::sort(armor_sets.begin(), armor_sets.end(), [](armor_set* lhs, armor_set* rhs)
{
auto lhs_collectible_count = collectible_mgr::get().count(lhs->needed_collectible);
auto rhs_collectible_count = collectible_mgr::get().count(rhs->needed_collectible);
if(lhs_collectible_count > 0 && rhs_collectible_count == 0)
{
return true;
}
else if(lhs_collectible_count == rhs_collectible_count)
{
return lhs->sort_index > rhs->sort_index;
}
else
{
auto lhs_collectibles_needed_count = lhs_collectible_count - lhs->collectibles_needed;
auto rhs_collectibles_needed_count = rhs_collectible_count - rhs->collectibles_needed;
return lhs_collectibles_needed_count > rhs_collectibles_needed_count;
}
});
您確定在矢量中沒有任何'nullptr'開始? –
@KarlKnechtel是的,雙重和三重檢查。 –
您可以顯示'armor_sets'的定義嗎? – David