1
我正在寫一個簡單的無需使用的UI框架,其中我需要通過我自己調度所有消息。2-prop排序列表的正確數據結構是什麼?
每個窗口小部件都有一個子窗口列表,它有兩個屬性:繪畫順序(接收繪畫消息的順序)和其他事件順序(接收消息而不是繪畫的順序)。
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,並使它每次我插入一個孩子排序窗口小部件?
在這個項目中,我無法使用boost等重庫。也許,我需要維護一個std :: list,兩個std :: set! – Jichao
@Jichao:你確定你需要一個'std :: list'嗎?一個'std :: vector'幾乎總是更高效。 –