1 Associative Containers Gordon College Prof. Brinton.

Slides:



Advertisements
Similar presentations
Main Index Contents 11 Main Index Contents Shifting blocks of elements… Shifting blocks of elements… Model of a list object… Model of a list object… Sample.
Advertisements

CSE Lecture 3 – Algorithms I
1 STL Map & Multimap Ford & Topp Chapter 11 Josuttis Sections: 6.5 & 6.6 CSE Lecture 15 – Maps.
Multimaps. Resources -- web For each new class, browse its methods These sites are richly linked, and contain indexes, examples, documents and other resources.
C++ Templates. What is a template? Templates are type-generic versions of functions and/or classes Template functions and template classes can be used.
Beginning C++ Through Game Programming, Second Edition
Week 5 - Associative Containers: sets and maps. 2 2 Main Index Main Index Content s Content s Container Types Sequence Containers Adapter Containers Associative.
1 Associative Containers Gordon College Prof. Brinton.
Main Index Contents 11 Main Index Contents Tree StructuresTree Structures (3 slides) Tree Structures Tree Node Level and Path Len. Tree Node Level and.
1 Chapter 11 Structured Types, Data Abstraction and Classes Dale/Weems/Headington.
COMP 171 Data Structures and Algorithms Tutorial 1 Template and STL.
More on the STL vector list stack queue priority_queue.
Main Index Contents 11 Main Index Contents Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers.
Main Index Contents 11 Main Index Contents Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers.
CMSC 202 Lesson 24 Iterators and STL Containers. Warmup Write the class definition for the templated Bag class – A bag has: Random insertion Random removal.
Lecture 11 Standard Template Library Stacks, Queue, and Deque Lists Iterators Sets Maps.
Templates and the STL.
Sorting and Vectors Mechanism for representing lists JPC and JWD © 2002 McGraw-Hill, Inc. Modified by S. Sudarshan.
Containers Overview and Class Vector
DATA STRUCTURES AND ALGORITHMS Lecture Notes 12 Prepared by İnanç TAHRALI.
STL-Associative Containers. Associative Containers Sequence containers : "This is item 0, this is item 1, this is item 2…“ Associative containers : –
Introduction to STL and the vector container class CS342 Data Structures Based on Ford & Topp.
Main Index Contents 11 Main Index Contents Week 3 – The Vector Container.
Dictionaries Collection of pairs.  (key, element)  Pairs have different keys  E.g. a pair contains two components, student id and name (1234, Nan)
Hashing Table Professor Sin-Min Lee Department of Computer Science.
CS 162 Intro to Programming II Searching 1. Data is stored in various structures – Typically it is organized on the type of data – Optimized for retrieval.
C++ STL CSCI 3110.
STL multimap Container. STL multimaps multimaps are associative containers –Link a key to a value –AKA: Hashtables, Associative Arrays –A multimap allows.
STL List // constructing lists #include int main () { // constructors used in the same order as described above: std::list first; // empty list of ints.
CSE 332: C++ STL containers Review: C++ Standard Template Library (STL) The STL is a collection of related software elements –Containers Data structures:
Templates code reuse - inheritance - template classes template classes - a class that is not data-type specific - eg. a class of Array of any type - intArray,
Chapter 9: Part 2: Vectors + Maps and STL Overview JPC and JWD © 2002 McGraw-Hill, Inc. Modified by S. Sudarshan.
An Introduction to STL. The C++ Standard Template Libraries  In 1990, Alex Stepanov and Meng Lee of Hewlett Packard Laboratories extended C++ with a.
Chapter 13 – C++ String Class. String objects u Do not need to specify size of string object –C++ keeps track of size of text –C++ expands memory region.
Lecture 11 Standard Template Library Lists Iterators Sets Maps.
1 Joe Meehean.  List of names  Set of names  Map names as keys phone #’s as values Phil Bill Will Phil Bill Will Phil Bill Will Phil: Bill:
1 Chapter 13-1 Applied Arrays: Lists and Strings Dale/Weems.
Standard C++ Library Part II. Last Time b String abstraction b Containers - vector.
Lecture 7 : Intro. to STL (Standard Template Library)
1 Associative Containers Ordered Ordered Unordered UnorderedSets Maps as sets of pairs Set API Ex: Sieve of Eratosthenes Ex: Sieve of EratosthenesImplementation.
The Standard Template Library Container Classes Version 1.0.
Prof. amr Goneid, AUC1 CSCE 110 PROGRAMMING FUNDAMENTALS WITH C++ Prof. Amr Goneid AUC Part 15. Dictionaries (1): A Key Table Class.
Associative Containers Sets Maps Section 4.8. Associative Containers.
1 Chapter 3 Lists, Stacks, and Queues Reading: Sections 3.1, 3.2, 3.3, 3.4 Abstract Data Types (ADT) Iterators Implementation of Vector.
Java & C++ Comparisons How important are classes and objects?? What mechanisms exist for input and output?? Are references and pointers the same thing??
CSCI 383 Object-Oriented Programming & Design Lecture 25 Martin van Bommel.
@ Zhigang Zhu, CSC212 Data Structure - Section FG Lecture 17 B-Trees and the Set Class Instructor: Zhigang Zhu Department of Computer Science.
Introduction to Data Structure, Fall 2006 Slide- 1 California State University, Fresno Introduction to Data Structure Chapter 4 Ming Li Department of Computer.
STL Associative Containers navigating by key. Pair Class aggregates values of two, possibly different, types used in associative containers defined in.
CSCI  Sequence Containers – store sequences of values ◦ vector ◦ deque ◦ list  Associative Containers – use “keys” to access data rather than.
Main Index Contents 11 Main Index Contents Sets Defined by a key along with other data Sets Defined by a key along with other data Key-Value Data Key-Value.
CPSC 252 Tables / Maps / Dictionaries Page 1 Tables, Maps and Dictionaries A table (or map or dictionary) is a collection of key/value pairs. In general.
Unit VI.  C++ templates are a powerful mechanism for code reuse, as they enable the programmer to write code (classes as well as functions) that behaves.
CSC212 Data Structure - Section AB
Standard Template Library (STL)
Chapter 9 – Sets and Maps 9.1 Associative Container
Associative Structures
A Sorted, Unique Key Container
Elements are always copied when they are put into a container
Recursive Linked List Operations
Chapter 10 1 – Binary Trees Tree Structures (3 slides)
Lists - I The List ADT.
Lists - I The List ADT.
Copyright © – Curt Hill STL List Details Copyright © – Curt Hill.
Iterators and STL Containers
Recitation Outline Hash tables in C++ STL Examples Recursive example
The List Container and Iterators
Chapter 9 – Sets and Maps 9.1 Associative Container
A dictionary lookup mechanism
Presentation transcript:

1 Associative Containers Gordon College Prof. Brinton

2 STL - Assoc. Containers Set –The key is the data set intSet; set keyword; set timeSet; To support the STL container - set; the programmer must overload the == operator and < operator by comparing the key field and giving a Boolean result.

3 STL - Assoc. Containers Map –Stores entries as key-value pair. –In a pair, the first component is the key; the second is the value. Each component may have a different data type. map studentFile; studentFile[ ] = new studentFile; studentFile[ ].addToBalance(112);

4 Set and Map Both containers do not allow duplicate keys. Multiset and multimap (also STL containers) allow duplicate keys)

5 STL sets and maps

6 CLASS set Constructors set(); Create an empty set. This is the Default Constructor. set(T *first, T *last); Initialize the set by using the address range [first, last). CLASS set Operations bool empty() const; Is the set empty? int size() const; Return the number of elements in the set.

7 CLASS set Operations int count(const T& key) const; Search for key in the set and return 1 if it is in the set and 0 otherwise. iterator find(const T& key); Search for key in the set and return an iterator pointing at it, or end() if it is not found. Const_iterator find(const T& key) const; Constant version.

8 CLASS set Operations pair insert(const T& key); If key is not in the set, insert it and then return a pair whose first element is an iterator pointing to the new element and whose second element is true. Otherwise, return a pair whose first element is an iterator pointing at the existing element and whose second element is false. Postcondition: The set size increases by 1 if key is not in the set. int erase(const T& key); If key is in the set, erase it and return 1; otherwise, return 0. Postcondition: The set size decreases by 1 if key is in the set.

9 CLASS set Operations void erase(iterator pos); Erase the item pointed to by pos. Preconditions: The set is not empty, and pos points to a valid set element. Postcondition: The set size decreases by 1. void erase(iterator first, iterator last); Erase the elements in the range [first, last). Precondition: The set is not empty. Postcondition: The set size decreases by the number of elements in the range.

10 CLASS set Operations iterator begin(); Return an iterator pointing at the first member in the set. const_iterator begin(const); Constant version of begin(). iterator end(); Return an iterator pointing just past the last member in the set. const_iterator end() const; Constant version of end().

11 Set operations Union setC = setA + setB; setC = IntersectionA*B setC = setA * setB; setC = Difference setC = setA - setB; setC =

12 Map swap begin end size empty operator[] find erase

13 #include using namespace std; int main() { map Employees; Employees[5234] = "Mike C."; Employees[3374] = "Charlie M."; Employees[1923] = "David D."; Employees[7582] = "John A."; Employees[5328] = "Peter Q."; cout << "Employees[3374]=" << Employees[3374] << endl << endl; cout << "Map size: " << Employees.size() << endl; for( map ::iterator ii=Employees.begin(); ii!=Employees.end(); ++ii) { cout << (*ii).first << ": " << (*ii).second << endl; }

14 #include using namespace std; int main() { map Employees; Employees[5234] = "Mike C."; Employees[3374] = "Charlie M."; Employees[1923] = "David D."; Employees[7582] = "John A."; Employees[5328] = "Peter Q."; cout << "Employees[3374]=" << Employees[3374] << endl << endl; cout << "Map size: " << Employees.size() << endl; for( map ::iterator ii=Employees.begin(); ii!=Employees.end(); ++ii) { cout << (*ii).first << ": " << (*ii).second << endl; } Employees[3374]=Charlie M. Map size: : David D. 3374: Charlie M. 5234: Mike C. 5328: Peter Q. 7582: John A.

15 #include using namespace std; int main() { map Employees; Employees["Mike C."] = 5234; Employees["Charlie M."] = 3374; Employees.insert(std::pair ("David D.",1923)); Employees.insert(map ::value_type("John A.",7582)); Employees.insert(std::make_pair("Peter Q.",5328)); cout << "Map size: " << Employees.size() << endl; for( map ::iterator ii=Employees.begin(); ii!=Employees.end(); ++ii) { cout << (*ii).first << ": " << (*ii).second << endl; }

16 #include using namespace std; int main() { map Employees; Employees["Mike C."] = 5234; Employees["Charlie M."] = 3374; Employees.insert(std::pair ("David D.",1923)); Employees.insert(map ::value_type("John A.",7582)); Employees.insert(std::make_pair("Peter Q.",5328)); cout << "Map size: " << Employees.size() << endl; for( map ::iterator ii=Employees.begin(); ii!=Employees.end(); ++ii) { cout << (*ii).first << ": " << (*ii).second << endl; } Map size: 5 Charlie M.: 3374 David D.: 1923 John A.: 7582 Mike C.: 5234 Peter Q.: 5328

17 struct cmp_str { bool operator()(char const *a, char const *b) { return std::strcmp(a, b) < 0; } }; int main() { map Employees; Employees["Mike C."] = 5234; Employees["Charlie M."] = 3374; Employees.insert(std::pair ("David D.",1923)); Employees.insert(map ::value_type("John A.",7582)); Employees.insert(std::make_pair((char *)"Peter Q.",5328)); cout << "Map size: " << Employees.size() << endl; for( map ::iterator ii=Employees.begin(); ii!=Employees.end(); ++ii) { cout << (*ii).first << ": " << (*ii).second << endl; }

18 struct cmp_str { bool operator()(char const *a, char const *b) { return std::strcmp(a, b) < 0; } }; int main() { map Employees; Employees["Mike C."] = 5234; Employees["Charlie M."] = 3374; Employees.insert(std::pair ("David D.",1923)); Employees.insert(map ::value_type("John A.",7582)); Employees.insert(std::make_pair((char *)"Peter Q.",5328)); cout << "Map size: " << Employees.size() << endl; for( map ::iterator ii=Employees.begin(); ii!=Employees.end(); ++ii) { cout << (*ii).first << ": " << (*ii).second << endl; } Map size: 5 Charlie M.: 3374 David D.: 1923 John A.: 7582 Mike C.: 5234 Peter Q.: 5328

19 Map details Associative Arrays M[“Computer Science”] = 20; Keys are unique therefore: M[“Computer Science”] = 26; replaces the value in the tree for CS.

20 Map details Creating a map: #include int main() { map A; …

21 Map Details [ ] operator Steps 1.Search the for map for key 2.If key found, return a reference to the value object associated with key. 3.If key not found, create a new object of type value associated with key, and return a reference to that.

22 Map Details [ ] operator int salary = Employee[“Jack Smith”]; Caution: this will create a new tree entry if it doesn’t exist and assign 0 to variable salary

23 Map Details [ ] operator Better technique: if (( itr = Employee.find(“Jack Smith”)) == Employee.end()) cout << “ the employee does not exist.” << endl; Else cout second << endl;

24 Map Details Pair Class 1. Must include 2. Contains two public members, first and second 3. Store key/value association itr->first itr->second

25 Map Details Pair Class Easiest way to construct pair: pair a; a = make_pair(string(“Jack Smith”), int(100000));

26 Map Details Element requirements: Each key and value must be assignable (an assignment operator which performs a “deep copy” Deep copy target of the assignment should be equal but independent of the source a = b; the value of a should match b - however if you change a it should not affect b (and vice versa) Note: if we talking about a linked list then a shallow copy would have two pointers pointing to the same list.

27 Map Details Element requirements: Also each key should adhere to “weak ordering”: 1. A<A is false 2. Equality can be determined with (!(A<B) && !(B<A)) Note: only using the less than operator 3. If A<B and B<C then A<C must be true int, char, double, etc. (built-in types) are strict weak ordered

28 Map Details Element requirements: value type used must have a defined default constructor. map The built in types have a type of default constructor: map

29 Map Details OperationDescriptionTime Complexity swap Swaps elements with another map. This operation is performed in constant time. Ex: map1.swap(map2); O(1) begin Returns an iterator to the first pair in the map. Ex: itr = map1.begin(); O(1) end Returns an iterator just beyond the end of the map. O(1)

30 Map Details OperationDescriptionTime Complexity size Returns the number of elements contained by the map. You should use empty() to test whether or not size equals 0, because empty() may be much faster. cout << map1.size(); O(n) empty Returns true if the map contains zero elements. O(1) Operator [ ]Accepts a key and returns a reference to the object associated with key. Note that this operator always creates an element associated with key if it does not exist. O(log n)

31 Map Details OperationDescriptionTime Complexity find Accepts a key and returns an iterator to the pair element if found. If the key is not found in the map, this method returns end(). if ( (itr = map1.find("Bob")) == map1.end()) cerr << "Bob was not found in the map." << endl; else cout << "Bob was found in the map." << endl; O(log n)

32 Map Details OperationDescriptionTime Complexity erase There are three overloaded forms of this method. The first accepts a single iterator, and removes the element implied by the iterator from the map. The map should be non-empty. O(1). Ex: assert(!map1.empty()); map1.erase(map1.begin()); // remove the first element O(1)

33 Map Details OperationDescriptionTime Complexity erase There are three overloaded forms of this method. The second accepts two iterators, that specify a range of values within the map to be removed. The time complexity is logarithmic plus linear time for the length of the sequence being removed. The two iterators must be valid iterators within the sequence contained by the map. Formally, the range of values [starting, ending) are removed. At worst, this is an O(n) operation. Ex: map1.erase(map1.begin(), map1.end()); // erase the entire map O(n)

34 Map Details OperationDescriptionTime Complexity erase There are three overloaded forms of this method. The last accepts an object of the key type, and removes all occurrences of the key from map. Note that since map elements all have unique keys, this will erase at most 1 element. O(log n). Ex: map1.erase(string("Bob")); // removes all occurences of "Bob" O(log n)

35 Multiset Allow multiple items with same key

36 Multiset Details OperationDescription constructorcreates an empty multiset multiset S sizereturns the number of elements S.size() insertS.insert( const T& ) : adds an item to the set. If the item is already present, there will be multiple copies in the multiset.. S.insert(6);

37 Multiset Details OperationDescription countS.count( const T& t ) : returns the number of times that the item t is found in the set. This will be 0 if the item is not found eraseS.erase( const T& t ) : removes the all items equal to t from the multiset. eraseS.erase( multiset ::iterator i ) : removes the item pointed to by i.

38 Multiset Details OperationDescription reverse reverse( iterator begin, iterator end ) : reverses the order of the items: S.erase( v ); // ALL: removes all of items == v from the multiset S.erase( S.find( v ) ); // ONE: removes the first item == v from the multiset find S.find( const T& t ) : returns an iterator that points to the first item == t, or S.end() if the item could not be found.

39 Multiset Details OperationDescription beginS.begin() : returns an iterator that points to the first element of S. Note that this is the smallest item in the multiset, because the multiset is always stored in sorted order. endS.end() : returns an iterator that points just past the last element of S. Note that this is the largest item in the multiset, because the multiset is always stored in sorted order.

40 Multiset Details OperationDescription equal_rangeS.equal_range(*iter) - returns a pair of iterators such that all occurrences of the item are in the iterator range pair ::iterator, multiset ::iterator > p; p = S.equal_range(5);