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;
}
我的测试用例如下所示:
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;
}