perform better in many real applications. Collisions are managed only via linear chaining because the committee didn't consider it to be opportune to standardize solutions of open addressing that introduce quite a lot of intrinsic problems (above all when erasure of elements is admitted). To avoid name clashes with non-standard libraries that developed their own hash table implementations, the prefix “unordered” was used instead of “hash”. The new library has four types of hash tables, differentiated by whether or not they accept elements with the same key (unique keys or equivalent keys), and whether they map each key to an associated value. They correspond to the four existing binary search tree based associative containers, with an prefix. The new classes fulfill all the requirements of a container class, and have all the methods needed to access elements: insert, erase, begin, end. This new feature didn't need any C++ language core extensions (though implementations will take advantage of various C++11 language features), only a small extension of the header <functional> and the introduction of headers <unordered_set> and <unordered_map>. No other changes to any existing standard classes were needed, and it doesn't depend on any other extensions of the standard library. Regular expressions The new library, defined in the new header <regex>, is made of a couple of new classes: regular expressions are represented by instance of the template class std::regex; occurrences are represented by instance of the template class std::match_results, std::regex_iterator is used to iterate over all matches of a regex The function std::regex_search is used for searching, while for ‘search and replace’ the function std::regex_replace is used which returns a new string. Here is an example of the use of std::regex_iterator: #include <regex> const char *pattern = R"([^ ,.\t\n]+)"; // find words separated by space, comma, period tab newline std::regex rgx(pattern); // throws exception on invalid pattern const char *target = "Unseen University - Ankh-Morpork"; // Use a regex_iterator to identify all words of 'target' separated by characters of 'pattern'. auto iter = std::cregex_iterator(target, target + strlen(target), rgx); // make an end of sequence iterator auto end = std::cregex_iterator(); for (; iter != end; ++iter) { std::string match_str = iter->str(); std::cout << match_str << '\n'; } The library <regex> requires neither alteration of any existing header (though it will use them where appropriate) nor an extension of the core language. In POSIX C, regular expressions are also available via the