如何将分配器与 std::set 一起使用?
How can I use an allocator with std::set?
我正在尝试使用我自己的分配器来测量 C++ 中的内存使用情况 std::set
。不幸的是,我在 link 时遇到错误。为了简化问题,我有以下程序:
#include<set>
#include<vector>
#include<memory>
//using Container = std::vector<int, std::allocator<int>>;
using Container = std::set<int, std::allocator<int>>;
int main() {
Container container;
container.push_back(4711);
container.insert(4711);
return 0;
}
可以在魔杖盒中找到结果https://wandbox.org/permlink/R5WcgSvSWiqstYxL#wandbox-resultwindow-code-body-1
我已经尝试了 gcc 6.3.0、gcc 7.1.0、clang 4.0.0 和 clang 6.0.0HEAD。在所有情况下,当我使用 std::set
时都会出错,但当我使用 std::vector
.
时不会出错
如何声明我的集合使用分配器?
我想使用 C++17,但 C++14 中的答案也可以。
您应该更仔细地查看 std::set
的模板参数:
template<
class Key,
class Compare = std::less<Key>,
class Allocator = std::allocator<Key>
> class set;
当你写:std::set<int, std::allocator<int>>
你是说你想使用分配器来比较键。这没有任何意义,并且因为分配器不像比较器那样可调用,所以编译器会抱怨。
您需要明确提供 Compare
参数:
using Container = std::set<int, std::less<int>, std::allocator<int>>;
我正在尝试使用我自己的分配器来测量 C++ 中的内存使用情况 std::set
。不幸的是,我在 link 时遇到错误。为了简化问题,我有以下程序:
#include<set>
#include<vector>
#include<memory>
//using Container = std::vector<int, std::allocator<int>>;
using Container = std::set<int, std::allocator<int>>;
int main() {
Container container;
container.push_back(4711);
container.insert(4711);
return 0;
}
可以在魔杖盒中找到结果https://wandbox.org/permlink/R5WcgSvSWiqstYxL#wandbox-resultwindow-code-body-1
我已经尝试了 gcc 6.3.0、gcc 7.1.0、clang 4.0.0 和 clang 6.0.0HEAD。在所有情况下,当我使用 std::set
时都会出错,但当我使用 std::vector
.
如何声明我的集合使用分配器?
我想使用 C++17,但 C++14 中的答案也可以。
您应该更仔细地查看 std::set
的模板参数:
template<
class Key,
class Compare = std::less<Key>,
class Allocator = std::allocator<Key>
> class set;
当你写:std::set<int, std::allocator<int>>
你是说你想使用分配器来比较键。这没有任何意义,并且因为分配器不像比较器那样可调用,所以编译器会抱怨。
您需要明确提供 Compare
参数:
using Container = std::set<int, std::less<int>, std::allocator<int>>;