ZBLOG

可以直接在比较中更新index吗

在比较函数中直接更新索引值可能会导致排序结果不正确。因为排序算法需要稳定的比较结果来保证排序的准确性。如果在比较函数中修改对象的属性,可能会破坏这种稳定性。

一种更可靠的方法是在排序完成后再循环遍历数组,逐个更新索引值。这样可以确保排序的准确性,并且同时更新索引。

以下是修改后的代码:

bool comparePersons(const SoundTrackNoteUnit* ptr_a, const SoundTrackNoteUnit* ptr_b)
{
    if (!ptr_a || !ptr_b) return false;
	
    return ptr_a->start_x < ptr_b->start_x; // 按照横坐标(时间)升序排序
}

void CPimageSoundTrackItemDlg::AdjustmentNoteOrder()
{
    std::sort(m_noteImageArr.begin(), m_noteImageArr.end(), comparePersons);

    // 更新索引值
    for (int i = 0; i < m_noteImageArr.size(); i++)
    {
        m_noteImageArr[i]->index = i;
    }
}

这样就能正确地对音符对象进行排序并更新索引值。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=13202

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?