【问题标题】:What's the correct data structure for 2-prop sorted list?2-prop 排序列表的正确数据结构是什么?
【发布时间】:2013-05-22 07:59:37
【问题描述】:

我正在编写一个简单的无句柄 ui 框架,我需要自己发送所有消息。

每个widget都有一个child列表,它有两个属性:paint order(接收paint消息的顺序)和other-event order(接收paint以外消息的顺序)。

void Widget::sortChildWidgets( SortMode mode )
{
    if (mode == kSortByPaint) {
        //return true if should precede otherwise return false;
        m_children.sort([&](Widget* pw1, Widget* pw2) ->bool {
            if (pw1->getPaintOrder() < pw2->getPaintOrder()) {
                return true;
            } else {
                return false;
            }
        });
    }

    if (mode == kSortByEvent) {
        //return true if should precede otherwise return false;
        m_children.sort([&](Widget* pw1, Widget* pw2) ->bool {
            if (pw1->getEventOrder() < pw2->getEventOrder()) {
                return true;
            } else {
                return false;
            }
        });
    }
}

因为小部件可以在运行时更改其顺序,所以我每次发送任何消息时都需要求助,这绝对是太糟糕了。

我的问题:是否有任何更好的数据结构而不是 std::list 可以让我在每次发送消息时免于排序,或者我需要维护 std::list 并在每次将子项插入小部件时对其进行排序?

【问题讨论】:

    标签: c++ data-structures stl


    【解决方案1】:

    保持物品有序的推荐数据结构是std::set。您可以为排序提供自定义谓词,从而将相同的项目保留在具有不同排序的多个集合中。

    如果您需要更高的性能,可以查看Boost.Multi-Index。这是一个库,旨在保留具有不同排序的同一数据集的多个视图。

    请注意,这些数据结构都没有假设键的值一旦添加就不会改变。

    【讨论】:

    • 在这个项目中,我无法使用boost等重型库。也许,我需要维护一个 std::list,两个 std::set!!!
    • @Jichao:你确定你需要std::list吗? std::vector 几乎总是更有效。
    猜你喜欢
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 2021-12-07
    • 2010-10-29
    • 1970-01-01
    • 2021-12-12
    相关资源
    最近更新 更多