1 / 12

Associative Containers Sets and Maps

Associative Containers Sets and Maps. Section 4.8. Generic Associative Containers. A generic container C C is a template class for any proper type T C<T> is capable of storing arbitrary number of T objects A container that is organized and accessible by value

ross-ross
Download Presentation

Associative Containers Sets and Maps

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Associative ContainersSets and Maps • Section 4.8

  2. Generic Associative Containers • A generic container C • C is a template class for any proper type T • C<T> is capable of storing arbitrary number of T objects • A container that is organized and accessible by value • Client may insert or remove any T object in C<T> • Client may not determine position in C<T> • Positional details left to implementation • The order of elements in container is independent of the order in which they are inserted into container • “aContainer” for short • Bidirectional Iterators • Both ++ and -- operations are supported

  3. Multimodal vs. Unimodal Associative Containers • Multimodal associative container • Duplicate elements are allowed • Insert operations always increase size by 1 • Unimodal associative container • Duplicate elements not allowed • Insert operations have dual personality • If t is not in C, then Insert(t) • If t is in C, then overwrite the existing t

  4. The Pair Template • A class that holds a pair of items (may be of different types) template <typename T1, typename T2> class Pair { public: T1 first; T2 second; Pair() {}; Pair(const T1& t1, const T2& t2): first(t1), second(t2) {}; }; • Examples • Pair<int, int> pair1; • Pair<string, int> pair2; • C++/STL • #include <utility> • pair<int, int> pair1 • pair<string, int> pair2

  5. Sets & Maps

  6. Sets • Sorted associative containers • Set • A sorted associative container that does not allow duplicates • Stores objects • Unimodal: duplicate objects not allowed

  7. The STL Set Template • set() // Creates an empty set. • set(const key_compare& comp) //Creates an empty set, use comp for key comparison • pair<iterator, bool> insert(const value_type& x) • iterator insert(iterator pos, const value_type& x) • Inserts x into the set, using pos as a hint to where it will be inserted. • void erase(iterator pos) • Erases the element pointed to by pos. • size_type erase(const key_type& k) • Erases the element whose key is k • void erase(iterator first, iterator last) • Erases all elements in a range • iterator find(const key_type& k) const • Finds an element whose key is k • Logarithmic complexity for insertion, remove, search

  8. Example Set Clients • Inventory struct StockItem { // barcode, name, amount }; void print_inventory(std::ostream &os, const set<StockItem>& inventory) { set<StockItem>::iterator I; for (I = inventory.begin(); I != inventory.end(); ++I) { os << *I; } } • Customer accounts class Customer { // ssn, account_number, last_name, first_name… }; int main() { set<Customer> customers; }

  9. Maps • Associative container that associates objects of type Key with objects of type Data • Sorted according to keys • Map • Stores (key, object) pairs • Unimodal: duplicate keys not allowed • AKA: table, associative array

  10. The STL Map Template • map() • map(const key_compare& comp) • pair<iterator, bool> insert(const value_type& x) • Inserts x into the map • iterator insert(iterator pos, const value_type& x) • Inserts x into the map, using pos as a hint to where it will be inserted • void insert(iterator, iterator) • Inserts a range into the map

  11. STL Map Template • void erase(iterator pos) • Erases the element pointed to by pos • size_type erase(const key_type& k) • Erases the element whose key is k • void erase(iterator first, iterator last) • Erases all elements in a range • iterator find(const key_type& k) • Finds an element whose key is k. • data_type& operator[](const key_type& k) • Returns a reference to the object that is associated with a particular key. • If the map does not already contain such an object, operator[] inserts the default object data_type()

  12. struct ltstr { bool operator()(const char* s1, const char* s2) const { return strcmp(s1, s2) < 0; } }; typedef map<const char*, int, ltstr> MAP; Typedef MAP::iterator ITR; int main() { MAP months; months["january"] = 31; months["february"] = 28; months["march"] = 31; months["april"] = 30; months["may"] = 31; months["june"] = 30; months["july"] = 31; months["august"] = 31; months["september"] = 30; months["october"] = 31; months["november"] = 30; months["december"] = 31; cout << "june: " << months["june"] << endl; ITR cur = months.find("june"); ITR prev = cur; ITR next = cur; ++next; --prev; cout << "Previous (in alphabetical order) is " << (*prev).first << “: “ << (*prev).second << endl; cout << "Next (in alphabetical order) is " << next->first “: “ << next->second << endl; } Map Usage Example

More Related