2010-01-22 167 views
0

我向std :: list和std :: set添加了兩個不同的元素,我希望std :: list按std的順序排序: :組。我嘗試過的一種方式是當元素被添加到std :: set時,找到該元素,然後使用std :: distance(begin,found)獲取該元素的索引,然後將該元素插入std :: list中的該索引。有沒有其他方法?使用std :: set排序std :: list

+5

你爲什麼要這樣做?對於您的問題,可能會有更好的整體解決方案,而不是找到可能保留列表並設置同步的方法。 – Patrick 2010-01-22 10:05:32

+0

只保留std :: set,當你需要std :: list時,你可以從std :: set創建它。 – fabrizioM 2010-01-22 10:17:32

+0

std :: set包含一個'key',而std :: list包含一個與key有關的值。在那種情況下,我認爲使用std :: map會是一個更好的主意。 – cpx 2010-01-22 10:41:09

回答

4

您應該使用std::map,將放入set中的數據作爲關鍵字,並將放入列表中的數據作爲值使用。

這樣你的列表元素將被排序。

0

這太複雜了! 事實上,std :: set實現爲二叉樹,並使用std :: less進行排序(默認情況下)。此外,這提供了「穩定的」迭代器,這意味着std :: set :: insert返回的迭代器將有效,直到元素被明確擦除。所以你可以把插入的迭代器放到std :: list。 明智的經文 - std :: list也有穩定的迭代器,所以你可以把項目列表,但放置迭代器來設置。最後一種方法是覆蓋std :: less