erase_const_iter.pass.cpp revision a8bf9de8057ad254cc642f33bd7d0a48dc1ae55c
1//===----------------------------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is dual licensed under the MIT and the University of Illinois Open 6// Source Licenses. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// <unordered_map> 11 12// template <class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, 13// class Alloc = allocator<pair<const Key, T>>> 14// class unordered_multimap 15 16// iterator erase(const_iterator p) 17 18#include <unordered_map> 19#include <string> 20#include <cassert> 21 22int main() 23{ 24 { 25 typedef std::unordered_multimap<int, std::string> C; 26 typedef std::pair<int, std::string> P; 27 P a[] = 28 { 29 P(1, "one"), 30 P(2, "two"), 31 P(3, "three"), 32 P(4, "four"), 33 P(1, "four"), 34 P(2, "four"), 35 }; 36 C c(a, a + sizeof(a)/sizeof(a[0])); 37 C::const_iterator i = c.find(2); 38 C::iterator j = c.erase(i); 39 40 assert(c.size() == 5); 41 typedef std::pair<C::const_iterator, C::const_iterator> Eq; 42 Eq eq = c.equal_range(1); 43 assert(std::distance(eq.first, eq.second) == 2); 44 C::const_iterator k = eq.first; 45 assert(k->first == 1); 46 assert(k->second == "one"); 47 ++k; 48 assert(k->first == 1); 49 assert(k->second == "four"); 50 eq = c.equal_range(2); 51 assert(std::distance(eq.first, eq.second) == 1); 52 k = eq.first; 53 assert(k->first == 2); 54 assert(k->second == "four"); 55 eq = c.equal_range(3); 56 assert(std::distance(eq.first, eq.second) == 1); 57 k = eq.first; 58 assert(k->first == 3); 59 assert(k->second == "three"); 60 eq = c.equal_range(4); 61 assert(std::distance(eq.first, eq.second) == 1); 62 k = eq.first; 63 assert(k->first == 4); 64 assert(k->second == "four"); 65 assert(std::distance(c.begin(), c.end()) == c.size()); 66 assert(std::distance(c.cbegin(), c.cend()) == c.size()); 67 } 68} 69