相关疑难解决方法(0)

boost :: unordered_map是......有序吗?

我有一个boost :: unordered_map,但它似乎是有序的,给我一种压倒性的感觉"你做错了".为什么输出按顺序排列?我希望底层哈希算法能够随机化这个顺序:

#include <iostream>
#include <boost/unordered_map.hpp>

int main()
{
    boost::unordered_map<int, int> im;

    for(int i = 0; i < 50; ++i)
    {
        im.insert(std::make_pair(i, i));
    }

    boost::unordered_map<int, int>::const_iterator i;

    for(i = im.begin(); i != im.end(); ++i)
    {
        std::cout << i->first << ", " << i->second << std::endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

...给我...

0, 0
1, 1
2, 2
...
47, 47
48, 48
49, 49
Run Code Online (Sandbox Code Playgroud)

检查boost的源代码:

inline std::size_t hash_value(int v)
{
    return static_cast<std::size_t>(v);
}
Run Code Online (Sandbox Code Playgroud)

......这可以解释它.下面的答案也包含了更高层次的思考,我发现它很有用.

c++ boost

7
推荐指数
2
解决办法
4806
查看次数

两个相同的unordered_maps的顺序是否相同?

换句话说,如果我填充两个unordered_map或者unordered_set具有完全相同内容和相同散列函数的对象,那么迭代它们会给出相同的键/值对序列吗?

如果是这样,那么它的条件是什么(例如相同的散列函数,相同的键,不一定是相同的值).

c c++ unordered-map unordered-set c++11

4
推荐指数
1
解决办法
885
查看次数

如何以升序输出unordered_map中的元素?

我在 unordered_map 中存储了一些中间结果。现在当试图输出它时,它显示键是按降序排列的。有没有办法以其他顺序显示它?如何?

c++ stl unordered-map

3
推荐指数
1
解决办法
3400
查看次数

标签 统计

c++ ×3

unordered-map ×2

boost ×1

c ×1

c++11 ×1

stl ×1

unordered-set ×1