gpt4 book ai didi

c++ - 如何计算包含最大 N 个元素的 std::multiset 的最大数量分配?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:01:45 34 4
gpt4 key购买 nike

我将 6 个对象推送到 std::multimap,但我在控制台中看到分配器的 8 个输出。为什么?总是N+2吗?如何计算N个元素的最大分配数?

我想在分配器中使用静态数组并返回指向它元素的指针以获取数据局部性。

template <class T>
struct Mallocator {
typedef T value_type;
Mallocator() = default;
template <class U> constexpr Mallocator(const Mallocator<U>&) noexcept {}
T* allocate(std::size_t n) {
if (n > std::numeric_limits<std::size_t>::max() / sizeof(T)) throw std::bad_alloc();
if (auto p = static_cast<T*>(std::malloc(n * sizeof(T)))) { std::cout << "allocate" << std::endl; return p; }
throw std::bad_alloc();
}
void deallocate(T* p, std::size_t) noexcept { std::cout << "free" << std::endl; std::free(p); }
};
template <class T, class U>
bool operator==(const Mallocator<T>&, const Mallocator<U>&) { return true; }
template <class T, class U>
bool operator!=(const Mallocator<T>&, const Mallocator<U>&) { return false; }

int main()
{
std::multiset<int, std::less<int>, Mallocator<int>> hashMap;

hashMap.insert(1);
hashMap.insert(2);
hashMap.insert(3);
hashMap.insert(4);
hashMap.insert(5);
hashMap.insert(6);

_getch();
}

最佳答案

我不认为它指定了如何实现多重集、集合等。您正在寻找的数字对于不同的平台/STL 版本可能是不同的数字/或者随着分配总数的增加而意外增加.

我建议您使用多态分配器(在 C++17 中引入),而不是自己制作或简单地实现一个支持最多所需元素数量的简单多重集。

关于c++ - 如何计算包含最大 N 个元素的 std::multiset 的最大数量分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58518472/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com