在每种情况下都有`std :: set`排序元素吗?

kra*_*mir 15 c++ sorting stl std set

cplusplus.com参考,它似乎std::set排序元素.

我需要排序字符串,但我不确定它是否适用于每个平台和编译器.主要是GCC,MinGW,VC.

Dan*_*ite 24

它的定义std::set是一个已排序的容器.它的标准部分.对它进行排序有助于维护它的集合,而不仅仅是任意集合.

资料来源:http://www.sgi.com/tech/stl/set.html

  • @AndreyMishchenko,为此你可以使用 `std::unordered_set` :) (3认同)

Ser*_*kyi 13

Actualy std :: set和std :: map并没有真正排序.这两个容器都是红黑树.因此,当您迭代这种类型的容器时,迭代器以这样的方式遍历树,使得它看起来像容器被排序.首先,它访问最左边的节点,然后访问最左边的节点的父节点,依此类推......


Tem*_*Rex 6

是的,std::set以这样的方式存储其元素,即迭代元素将按排序顺序完成(并且调用std::adjacent_find是为了显示std::set存储唯一项目).

#include <algorithm>
#include <iterator>
#include <ios>
#include <iostream>
#include <set>
#include <string>

int main()
{
    auto const ss = std::set<std::string> { "foo", "bar", "test" };
    std::cout << std::boolalpha << std::is_sorted(begin(ss), end(ss)) << "\n";
    std::cout << std::boolalpha << (std::adjacent_find(begin(ss), end(ss)) == end(ss)) << "\n";
    std::copy(begin(ss), end(ss), std::ostream_iterator<std::string>(std::cout, "\n"));
}
Run Code Online (Sandbox Code Playgroud)

实例