C++ std::集合中的顺序和与std::无序集合的差异

C++ std::集合中的顺序和与std::无序集合的差异,c++,c++11,stl,containers,stdset,C++,C++11,Stl,Containers,Stdset,我希望std::set的顺序与std::list或std::vector一样一致,只是不会再追加一个值。MSVC110证明我错了。我希望下面的代码会产生如下所示的结果,在ideone()上运行代码时就是这样(但不确定他们使用的编译器和版本) #包括 #包括 模板 int insert\u get\u索引(C&container,typename C::value\u type value) { typename C::iterator it=container.insert(value).fir

我希望
std::set
的顺序与
std::list
std::vector
一样一致,只是不会再追加一个值。MSVC110证明我错了。我希望下面的代码会产生如下所示的结果,在ideone()上运行代码时就是这样(但不确定他们使用的编译器和版本)

#包括
#包括
模板
int insert\u get\u索引(C&container,typename C::value\u type value)
{
typename C::iterator it=container.insert(value).first;
返回std::distance(container.begin(),it);
}
int main()
{
INTA=3,b=1,c=9;
std::set;
标准::cout
我是否错误地理解了文档,而std::set是按值排序的


它确实是按值排序的。除非您提供自己的比较器,否则它们是通过使用
std::less
进行比较来排序的。对于大多数类型,这使用
“是否有其他标准库容器满足我的要求?”-您的要求是什么?@MikeSeymour如上所述,我希望
std::set
保持插入值的顺序,但只插入一次。这是我的要求。
std::set
是一个有序的关联容器,通常用红黑树实现。@T.C.我以前也用红色表示过。但它没有指定d以什么“顺序”(编辑:或者我错过了它,在这种情况下,我很抱歉)。使用您创建集合时提供的比较器订购。默认情况下,它是
std::less
…或使用Boost.MultiIndex为您处理一致性问题。感谢@MikeSeymour提供这一透彻且易懂的答案。我现在使用
std::vector