std::unordered_multiset 异常迭代桶

std::unordered_multiset exception iterating bucket

我的测试用例如下所示:

std::size_t t(const int &i) { return i | 0b01010101010101010101010101010101; }

int main()
{
    std::unordered_multiset<int, decltype(&t)> um(100, t);
    um.insert(9872934);
    um.insert(9024582);
    um.insert(2589429);
    um.insert(2254009);
    um.insert(3254082);
    um.insert(3945820);
    um.insert(8347893);

    auto intf = t(9872934);
    for (auto cb = um.begin(intf), end = um.end(intf); cb != end; ++cb)
    {
        std::cout << *cb;
    }
};

使用 Microsoft 调试 Visual Studio Community 2022 v17.1.2 构造迭代器抛出异常;首先我认为散列函数 (t) 可能是罪魁祸首所以我试过这个:

std::unordered_multiset<int> um; // no custom hash, just multiset of integers...
um.insert(9872934);
um.insert(9024582);
um.insert(2589429);
um.insert(2254009);
um.insert(3254082);
um.insert(3945820);
um.insert(8347893);

auto intf = t(9872934);
for (auto cb = um.begin(intf), end = um.end(intf); cb != end; ++cb)
{
    std::cout << *cb;
}

但它的行为方式相同,即使在在线编译器 (check it out) 中也是如此。我缺少什么?我应该如何进行这项工作?

begin(bucket) 函数的参数是桶号而不是键。

需要使用bucket获取key对应的桶号

auto intf = um.bucket(t(9872934)); <<<====
for (auto cb = um.begin(intf), end = um.end(intf); cb != end; ++cb)
{
    std::cout << *cb;
}