multimap.cpp
上传用户:qdkongtiao
上传日期:2022-06-29
资源大小:356k
文件大小:3k
源码类别:

书籍源码

开发平台:

Visual C++

  1. /*
  2.  * This file contains code from "C++ Primer, Fourth Edition", by Stanley B.
  3.  * Lippman, Jose Lajoie, and Barbara E. Moo, and is covered under the
  4.  * copyright and warranty notices given in that book:
  5.  * 
  6.  * "Copyright (c) 2005 by Objectwrite, Inc., Jose Lajoie, and Barbara E. Moo."
  7.  * 
  8.  * 
  9.  * "The authors and publisher have taken care in the preparation of this book,
  10.  * but make no expressed or implied warranty of any kind and assume no
  11.  * responsibility for errors or omissions. No liability is assumed for
  12.  * incidental or consequential damages in connection with or arising out of the
  13.  * use of the information or programs contained herein."
  14.  * 
  15.  * Permission is granted for this code to be used for educational purposes in
  16.  * association with the book, given proper citation if and when posted or
  17.  * reproduced.Any commercial use of this code requires the explicit written
  18.  * permission of the publisher, Addison-Wesley Professional, a division of
  19.  * Pearson Education, Inc. Send your request for permission, stating clearly
  20.  * what code you would like to use, and in what specific way, to the following
  21.  * address: 
  22.  * 
  23.  *  Pearson Education, Inc.
  24.  *  Rights and Contracts Department
  25.  *  75 Arlington Street, Suite 300
  26.  *  Boston, MA 02216
  27.  *  Fax: (617) 848-7047
  28. */ 
  29. #include "assoc_preamble.h"
  30. #include "assoc_preamble.h"
  31. int main()
  32. {
  33.     // map from author to title; there can be multiple titles per author
  34.     multimap<string, string> authors;
  35.     // add data to authors
  36.     authors.insert(pair<string, string>("Alain de Botton", "book1"));
  37.     authors.insert(pair<string, string>("Alain de Botton", "book2"));
  38.     authors.insert(pair<string, string>("Alain de Botton", "book3"));
  39.     authors.insert(pair<string, string>("Alain de Botton", "book4"));
  40.     // author we'll look for
  41.     string search_item("Alain de Botton");
  42.     // how many entries are there for this author
  43.     typedef multimap<string, string>::size_type sz_type;
  44.     sz_type entries = authors.count(search_item);
  45.     // get iterator to the first entry for this author
  46.     multimap<string,string>::iterator iter = 
  47.                              authors.find(search_item);
  48.     // loop through the number of entries there are for this author
  49.     for (sz_type cnt = 0; cnt != entries; ++cnt, ++iter)
  50.            cout << iter->second << endl; // print each title
  51.     // definitions of authors and search_item as above
  52.     // beg and end denote range of elements for this author
  53.     typedef multimap<string, string>::iterator authors_it;
  54.     authors_it beg = authors.lower_bound(search_item),
  55.                end = authors.upper_bound(search_item);
  56.     // loop through the number of entries there are for this author
  57.     while (beg != end) {
  58.         cout << beg->second << endl; // print each title
  59.         ++beg;
  60.     }
  61.     // definitions of authors and search_item as above
  62.     // pos holds iterators that denote range of elements for this key
  63.     pair<authors_it, authors_it> 
  64.                      pos = authors.equal_range(search_item);
  65.     // loop through the number of entries there are for this author
  66.     while (pos.first != pos.second) {
  67.         cout << pos.first->second << endl; // print each title
  68.         ++pos.first;
  69.     }
  70.     return 0;
  71. }