1b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===// 2b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 3b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// The LLVM Compiler Infrastructure 4b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 5b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// This file is dual licensed under the MIT and the University of Illinois Open 6b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// Source Licenses. See LICENSE.TXT for details. 7b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 8b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===// 9b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 10b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// <unordered_map> 11b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 12b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// template <class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, 13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// class Alloc = allocator<pair<const Key, T>>> 14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// class unordered_multimap 15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// iterator erase(const_iterator p) 17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <unordered_map> 19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <string> 20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cassert> 21b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 22ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#include "../../../min_allocator.h" 23ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner 24b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main() 25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{ 26b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 27b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::unordered_multimap<int, std::string> C; 28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::pair<int, std::string> P; 29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner P a[] = 30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner P(1, "one"), 32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner P(2, "two"), 33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner P(3, "three"), 34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner P(4, "four"), 35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner P(1, "four"), 36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner P(2, "four"), 37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner }; 38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner C c(a, a + sizeof(a)/sizeof(a[0])); 39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner C::const_iterator i = c.find(2); 40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner C::iterator j = c.erase(i); 41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(c.size() == 5); 43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::pair<C::const_iterator, C::const_iterator> Eq; 44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner Eq eq = c.equal_range(1); 45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::distance(eq.first, eq.second) == 2); 46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner C::const_iterator k = eq.first; 47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(k->first == 1); 48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(k->second == "one"); 49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner ++k; 50b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(k->first == 1); 51b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(k->second == "four"); 52b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner eq = c.equal_range(2); 53b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::distance(eq.first, eq.second) == 1); 54b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner k = eq.first; 55b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(k->first == 2); 56b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(k->second == "four"); 57b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner eq = c.equal_range(3); 58b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::distance(eq.first, eq.second) == 1); 59b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner k = eq.first; 60b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(k->first == 3); 61b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(k->second == "three"); 62b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner eq = c.equal_range(4); 63b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::distance(eq.first, eq.second) == 1); 64b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner k = eq.first; 65b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(k->first == 4); 66b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(k->second == "four"); 67b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::distance(c.begin(), c.end()) == c.size()); 68b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::distance(c.cbegin(), c.cend()) == c.size()); 69b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 70ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#if __cplusplus >= 201103L 71ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner { 72ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>, 73ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner min_allocator<std::pair<const int, std::string>>> C; 74ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner typedef std::pair<int, std::string> P; 75ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner P a[] = 76ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner { 77ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner P(1, "one"), 78ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner P(2, "two"), 79ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner P(3, "three"), 80ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner P(4, "four"), 81ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner P(1, "four"), 82ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner P(2, "four"), 83ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner }; 84ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner C c(a, a + sizeof(a)/sizeof(a[0])); 85ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner C::const_iterator i = c.find(2); 86ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner C::iterator j = c.erase(i); 87ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner 88ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(c.size() == 5); 89ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner typedef std::pair<C::const_iterator, C::const_iterator> Eq; 90ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner Eq eq = c.equal_range(1); 91ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(std::distance(eq.first, eq.second) == 2); 92ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner C::const_iterator k = eq.first; 93ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(k->first == 1); 94ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(k->second == "one"); 95ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner ++k; 96ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(k->first == 1); 97ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(k->second == "four"); 98ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner eq = c.equal_range(2); 99ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(std::distance(eq.first, eq.second) == 1); 100ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner k = eq.first; 101ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(k->first == 2); 102ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(k->second == "four"); 103ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner eq = c.equal_range(3); 104ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(std::distance(eq.first, eq.second) == 1); 105ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner k = eq.first; 106ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(k->first == 3); 107ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(k->second == "three"); 108ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner eq = c.equal_range(4); 109ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(std::distance(eq.first, eq.second) == 1); 110ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner k = eq.first; 111ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(k->first == 4); 112ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(k->second == "four"); 113ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(std::distance(c.begin(), c.end()) == c.size()); 114ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner assert(std::distance(c.cbegin(), c.cend()) == c.size()); 115ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner } 116ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#endif 117b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner} 118