来自boost和standard的unordered_set的区别

Umu*_*bak 1 c++ boost unordered-set

我试图使用boost和标准的unordered_set为应用程序,目的是找到这个地方,即该集合中某些元素的索引.结果之间存在细微差别.根据这个简单的程序,提升中的元素是相反的.问题出在哪儿?

简单的"假设"代码:

#include <iostream>
#include <iterator>
#include <unordered_set>
#include <boost/unordered_set.hpp>

//using boost::unordered_set;
using std::unordered_set;
using std::distance;

int main()
{
  unordered_set<int> Set;
  int sz = 10;
    for(int k=0;k<sz;k++)
        Set.insert(k);
  unordered_set<int>::iterator ind_searched = Set.find(8);
  unordered_set<int>::size_type indx = distance( Set.begin(),
                                                 ind_searched );
  std::cout << " Index of element is "
            << indx << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到了提升

Index of element is 1
Run Code Online (Sandbox Code Playgroud)

我正在使用标准的unordered_set

Index of element is 8
Run Code Online (Sandbox Code Playgroud)

我用两个编译

g++ sgi_stl_1.cc -I /home/utab/external_libraries/boost_1_48_0/ -std=c++0x
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 6

你不应该承担有关的任何实现内部订购任何东西unordered_map,unordered_set,他们的multi同行或同等或hash_sethash_maps.将元素存储的位置视为完全实现定义,并且易于及时更改.排序不仅会变化之间boostC++11标准,但之间不同的硬件平台和不同C++实现之间.任何依赖某种顺序的代码都是有缺陷的.所以,你回答你的问题

问题出在哪儿?

问题仅在于假设无序数据结构中的某些数据排序.