Support the conversion for std::unordered_map (#932)

This commit is contained in:
Chen
2022-01-06 08:12:40 +08:00
committed by GitHub
parent d8d9419092
commit bce601f2bf
2 changed files with 56 additions and 0 deletions

View File

@@ -40,6 +40,7 @@ class CustomAllocator : public std::allocator<T> {
template <class T> using CustomVector = std::vector<T,CustomAllocator<T>>;
template <class T> using CustomList = std::list<T,CustomAllocator<T>>;
template <class K, class V, class C=std::less<K>> using CustomMap = std::map<K,V,C,CustomAllocator<std::pair<const K,V>>>;
template <class K, class V, class H=std::hash<K>, class P=std::equal_to<K>> using CustomUnorderedMap = std::unordered_map<K,V,H,P,CustomAllocator<std::pair<const K,V>>>;
} // anonymous namespace
@@ -435,6 +436,34 @@ TEST(NodeTest, StdMapWithCustomAllocator) {
EXPECT_EQ(squares, actualSquares);
}
TEST(NodeTest, StdUnorderedMap) {
std::unordered_map<int, int> squares;
squares[0] = 0;
squares[1] = 1;
squares[2] = 4;
squares[3] = 9;
squares[4] = 16;
Node node;
node["squares"] = squares;
std::unordered_map<int, int> actualSquares = node["squares"].as<std::unordered_map<int, int>>();
EXPECT_EQ(squares, actualSquares);
}
TEST(NodeTest, StdUnorderedMapWithCustomAllocator) {
CustomUnorderedMap<int,int> squares;
squares[0] = 0;
squares[1] = 1;
squares[2] = 4;
squares[3] = 9;
squares[4] = 16;
Node node;
node["squares"] = squares;
CustomUnorderedMap<int,int> actualSquares = node["squares"].as<CustomUnorderedMap<int,int>>();
EXPECT_EQ(squares, actualSquares);
}
TEST(NodeTest, StdPair) {
std::pair<int, std::string> p;
p.first = 5;