C++/Set Multiset/multiset erase

Материал из C\C++ эксперт
Перейти к: навигация, поиск

Demonstrating multiset erase a found element

<source lang="cpp">

  1. include <iostream>
  2. include <cassert>
  3. include <list>
  4. include <string>
  5. include <set>

using namespace std;

  1. include <functional>

int main() {

 string s("There is no distinctly native American criminal class");
 list<char> list1(s.begin(), s.end());
 // Put the characters in list1 into multiset1:
 multiset<char> multiset1;
 copy(list1.begin(), list1.end(),inserter(multiset1, multiset1.end()));
 multiset1.erase("a");
 multiset<char>::iterator i = multiset1.find("e");
 multiset1.erase(i);
 multiset<char>::iterator k;
 for (k = multiset1.begin(); k != multiset1.end(); ++k)
   cout << *k;
 return 0;

}

/* 
      ATccccdeeehiiiiiiilllmmnnnnnorrrsssstttvy"
*/       
   
 </source>


Demonstrating multiset erase functions

<source lang="cpp">

  1. include <iostream>
  2. include <cassert>
  3. include <list>
  4. include <string>
  5. include <set>

using namespace std;

  1. include <functional>

int main() {

 string s("There is no distinctly native American criminal class");
 list<char> list1(s.begin(), s.end());
 // Put the characters in list1 into multiset1:
 multiset<char> multiset1;
 copy(list1.begin(), list1.end(),inserter(multiset1, multiset1.end()));
 multiset1.erase("a");
 multiset<char>::iterator k;
 for (k = multiset1.begin(); k != multiset1.end(); ++k)
   cout << *k;
 return 0;

}

/* 
      ATccccdeeeehiiiiiiilllmmnnnnnorrrsssstttvy"
*/       
   
 </source>


Demonstrating multiset erase functions: erase a range

<source lang="cpp">

  1. include <iostream>
  2. include <cassert>
  3. include <list>
  4. include <string>
  5. include <set>

using namespace std;

  1. include <functional>

int main() {

 string s("There is no distinctly native American criminal class");
 list<char> list1(s.begin(), s.end());
 // Put the characters in list1 into multiset1:
 multiset<char> multiset1;
 copy(list1.begin(), list1.end(),inserter(multiset1, multiset1.end()));
 multiset1.erase("a");
 multiset<char>::iterator i = multiset1.find("e");
 multiset<char>::iterator j = multiset1.find("v");
 multiset1.erase(i, j);
 multiset<char>::iterator k;
 for (k = multiset1.begin(); k != multiset1.end(); ++k)
   cout << *k;
 return 0;

}

/* 
      ATccccdvy
*/       
   
 </source>


Remove all elements up to element with value 3

<source lang="cpp">

/* The following code example is taken from the book

* "The C++ Standard Library - A Tutorial and Reference"
* by Nicolai M. Josuttis, Addison-Wesley, 1999
*
* (C) Copyright Nicolai M. Josuttis 1999.
* Permission to copy, use, modify, sell and distribute this software
* is granted provided this copyright notice appears in all copies.
* This software is provided "as is" without express or implied
* warranty, and with no claim as to its suitability for any purpose.
*/
  1. include <iostream>
  2. include <set>
  3. include <algorithm>
  4. include <iterator>

using namespace std; int main() {

   /* type of the collection:
    * - duplicates allowed
    * - elements are integral values
    * - descending order
    */
   typedef multiset<int,greater<int> > IntSet;
   IntSet coll1;        // empty multiset container
   // insert elements in random order
   coll1.insert(4);
   coll1.insert(3);
   coll1.insert(5);
   coll1.insert(1);
   coll1.insert(6);
   coll1.insert(2);
   coll1.insert(5);
   // iterate over all elements and print them
   IntSet::iterator pos;
   for (pos = coll1.begin(); pos != coll1.end(); ++pos) {
       cout << *pos << " ";
   }
   cout << endl;
   // assign elements to another multiset with ascending order
   multiset<int> coll2(coll1.begin(),
                       coll1.end());
   
   // remove all elements up to element with value 3
   coll2.erase (coll2.begin(), coll2.find(3));
   // print all elements of the copy
   copy (coll2.begin(), coll2.end(),
         ostream_iterator<int>(cout," "));
   cout << endl;

}

/* 

6 5 5 4 3 2 1 3 4 5 5 6

*/       
   
 </source>


Remove all elements with value 5

<source lang="cpp">

/* The following code example is taken from the book

* "The C++ Standard Library - A Tutorial and Reference"
* by Nicolai M. Josuttis, Addison-Wesley, 1999
*
* (C) Copyright Nicolai M. Josuttis 1999.
* Permission to copy, use, modify, sell and distribute this software
* is granted provided this copyright notice appears in all copies.
* This software is provided "as is" without express or implied
* warranty, and with no claim as to its suitability for any purpose.
*/
  1. include <iostream>
  2. include <set>
  3. include <algorithm>
  4. include <iterator>

using namespace std; int main() {

   /* type of the collection:
    * - duplicates allowed
    * - elements are integral values
    * - descending order
    */
   typedef multiset<int,greater<int> > IntSet;
   IntSet coll1;        // empty multiset container
   // insert elements in random order
   coll1.insert(4);
   coll1.insert(3);
   coll1.insert(5);
   coll1.insert(1);
   coll1.insert(6);
   coll1.insert(2);
   coll1.insert(5);
   // iterate over all elements and print them
   IntSet::iterator pos;
   for (pos = coll1.begin(); pos != coll1.end(); ++pos) {
       cout << *pos << " ";
   }
   cout << endl;
   // assign elements to another multiset with ascending order
   multiset<int> coll2(coll1.begin(),
                       coll1.end());
   
   // remove all elements with value 5
   int num;
   num = coll2.erase (5);
   cout << num << " element(s) removed" << endl;
   // print all elements of the copy
   copy (coll2.begin(), coll2.end(),
         ostream_iterator<int>(cout," "));
   cout << endl;

} /* 6 5 5 4 3 2 1 2 element(s) removed 1 2 3 4 6

*/        
   
 </source>


Using the erase Member Function on a Multiset

<source lang="cpp">

  1. include <set>
  2. include <iostream>

using namespace std; typedef multiset <int> MSETINT; int main () {

   MSETINT msetIntegers;
   msetIntegers.insert (43);
   msetIntegers.insert (78);
   msetIntegers.insert (78);
   msetIntegers.insert (-1);
   msetIntegers.insert (124);
   MSETINT::const_iterator iElement;
   cout << msetIntegers.size () << " elements.";
   for ( iElement = msetIntegers.begin (); iElement != msetIntegers.end (); ++ iElement )
       cout << *iElement << endl;
   int nNumberToErase = 2;
   cout << msetIntegers.count (nNumberToErase);
   cout << nNumberToErase << endl;
   msetIntegers.erase (nNumberToErase);
   cout << msetIntegers.size () << " elements.";
   for ( iElement = msetIntegers.begin (); iElement != msetIntegers.end (); ++ iElement )
       cout << *iElement << endl;
   return 0;

}


 </source>