我对STL很新,所以我想知道是否有任何可动态排序的容器?目前我当前的想法是将矢量与各种排序算法结合使用,但我不确定是否有更合适的选择,因为(可能)线性复杂性将条目插入到排序向量中.
为了澄清"动态",我正在寻找一个容器,我可以在运行时修改排序顺序 - 例如按升序排序,然后按降序重新排序.
你会想看看std :: map
std::map
映射基于为keyType提供的<运算符进行排序.
要么
std::set
还在模板参数的<运算符上排序,但不允许重复元素.
有
std::multiset
它与std :: set做同样的事情,但允许相同的元素.
我高度推荐Josuttis的"C++标准库"以获取更多信息.它是std库的最全面的概述,非常易读,并且充满了模糊和不那么模糊的信息.
此外,如26日中的第17条所述,Meyers的Effective Stl值得一读.
如果你知道你要按单个值升序和降序排序,那么set就是你的朋友.如果要在相反方向"排序",请使用反向迭代器.
如果您的对象很复杂,并且您将根据对象中的成员字段以多种不同方式进行排序,那么使用向量和排序可能会更好.尝试一次完成插入,然后调用一次排序.如果这不可行,那么对于大型对象集合,deque可能是比向量更好的选择.
我认为如果您对该级别的优化感兴趣,最好使用实际数据来分析您的代码.(这可能是这里任何人都可以给出的最佳建议:如果你只是在蓝月亮中做一次,那么你可以在每次插入后调用sort.)