动态排序的STL容器

dla*_*nod 11 c++ containers stl

我对STL很新,所以我想知道是否有任何可动态排序的容器?目前我当前的想法是将矢量与各种排序算法结合使用,但我不确定是否有更合适的选择,因为(可能)线性复杂性将条目插入到排序向量中.

为了澄清"动态",我正在寻找一个容器,我可以在运行时修改排序顺序 - 例如按升序排序,然后按降序重新排序.

Dou*_* T. 17

你会想看看std :: map

std::map<keyType, valueType>
Run Code Online (Sandbox Code Playgroud)

映射基于为keyType提供的<运算符进行排序.

要么

std::set<valueType>
Run Code Online (Sandbox Code Playgroud)

还在模板参数的<运算符上排序,但不允许重复元素.

std::multiset<valueType>
Run Code Online (Sandbox Code Playgroud)

它与std :: set做同样的事情,但允许相同的元素.

我高度推荐Josuttis的"C++标准库"以获取更多信息.它是std库的最全面的概述,非常易读,并且充满了模糊和不那么模糊的信息.

此外,如26日中的第17条所述,Meyers的Effective Stl值得一读.


mos*_*ald 10

如果你知道你要按单个值升序和降序排序,那么set就是你的朋友.如果要在相反方向"排序",请使用反向迭代器.

如果您的对象很复杂,并且您将根据对象中的成员字段以多种不同方式进行排序,那么使用向量和排序可能会更好.尝试一次完成插入,然后调用一次排序.如果这不可行,那么对于大型对象集合,deque可能是比向量更好的选择.

我认为如果您对该级别的优化感兴趣,最好使用实际数据来分析您的代码.(这可能是这里任何人都可以给出的最佳建议:如果你只是在蓝月亮中做一次,那么你可以在每次插入后调用sort.)