Mega Code Archive

 
Categories / C++ Tutorial / Set Multiset
 

Modify or Remove a Value in a Set or Multiset

#include <iostream> #include <set> #include <vector> using namespace std; template <class T> void print(T& c){    for( typename T::iterator i = c.begin(); i != c.end(); i++ ){       std::cout << *i << endl;    } } int main(){    const int num_grades = 11;    const int grade[num_grades] = { 2, 5, 3, 8, 9, 9, 6, 3, 5, 9, 10 };    set<int> unique( grade, grade+num_grades );    multiset<int> all( grade, grade+num_grades );    print( unique );    print( all );    const int wrong_grade = 9;    const int right_grade = 10;    if( unique.erase( wrong_grade ) == 1 ){       if( unique.insert( right_grade ).second )          cout << "Added new, unique grade of " << right_grade << endl;       else          cout << "Already have unique grade of " << right_grade << endl;    }    else       cout << "No unique grade of " << wrong_grade << endl;    multiset<int>::size_type num_wrong = all.erase( wrong_grade );    if( num_wrong > 0 ) {       vector<int> right( num_wrong, right_grade );       all.insert( right.begin(), right.end() );       unique.erase( wrong_grade );       unique.insert( right_grade );    }    else       cout << "No wrong grades of " << wrong_grade << endl;    const int drop_grade = 5;    multiset<int>::iterator spot = all.find( drop_grade );    if( spot != all.end() ) {       all.erase( spot );       if( all.count( drop_grade ) == 0 )          unique.erase( drop_grade );    }    else       cout << "Couldn't find a grade of " << drop_grade << endl;    print( unique);    print( all); }