#include "../Headers/std_lib_facilities.h"
struct Item
{
string name;
int iid;
double value;
/* . . . */
} ;
// how come this operator works, and I haven't addressed '\n' explicitly?
istream& operator >> ( istream& is, Item& item)
{
string name;
int iid;
double value;
char ch1;
char ch2;
is >> ch1;
if ( ch1 ! = '{' )
{
error( "Bad formmatting" ) ;
}
is >> name;
is >> iid;
is >> value;
is >> ch2;
if ( ch2 ! = '}' )
{
error( "Bad formmatting" ) ;
}
item.name = name;
item.iid = iid;
item.value = value;
}
void printVector( const vector< Item> & arg)
{
for ( int i = 0 ; i < arg.size ( ) ; i++ )
{
cout << arg[ i] .name << " " << arg[ i] .iid << " " << arg[ i] .value << endl;
}
}
int main( )
{
// 1. Define a struct Item { string name; int iid; double value; /* . . . */ };, make a vector<Item>, vi, and fill it
// with ten items from a file.
ifstream is{ "Drills.txt" } ;
vector< Item> items;
for ( int i = 0 ; i < 10 ; i++ )
{
Item temp;
is >> temp;
items.push_back ( temp) ;
}
// 2. Sort vi by name.
sort( items.begin ( ) , items.end ( ) , [ ] ( const Item& item1, const Item& item2) { return item1.name < item2.name ; } ) ;
printVector( items) ;
cout << "--------------------------------------------------" << endl;
// 3. Sort vi by iid.
sort( items.begin ( ) , items.end ( ) , [ ] ( const Item& item1, const Item& item2) { return item1.iid < item2.iid ; } ) ;
printVector( items) ;
cout << "--------------------------------------------------" << endl;
// 4. Sort vi by value; print it in order of decreasing value (i.e., largest value first).
sort( items.begin ( ) , items.end ( ) , [ ] ( const Item& item1, const Item& item2) { return item1.value > item2.value ; } ) ;
printVector( items) ;
cout << "--------------------------------------------------" << endl;
// 5. Insert Item('horse shoe',99,12.34) and Item('Canon S400', 9988,499.95).
items.push_back ( Item{ "horse shoe" , 99 , 12.34 } ) ;
items.push_back ( Item{ "Canon S400" , 9988 , 499.95 } ) ;
// 6. Remove (erase) two Items identified by name from vi.
string firstName, secondName;
cin >> firstName >> secondName;
for ( auto it = items.begin ( ) ; it ! = items.end ( ) ; it++ )
{
if ( ( it- > name == firstName) || ( it- > name == secondName) )
{
items.erase ( it) ;
}
}
printVector( items) ;
cout << "--------------------------------------------------" << endl;
// 7. Remove (erase) two Items identified by iid from vi.
int iid1, iid2;
cin >> iid1 >> iid2;
for ( auto it = items.begin ( ) ; it ! = items.end ( ) ; it++ )
{
if ( ( it- > iid == iid1) || ( it- > iid == iid2) )
{
items.erase ( it) ;
}
}
printVector( items) ;
}
I2luY2x1ZGUgIi4uL0hlYWRlcnMvc3RkX2xpYl9mYWNpbGl0aWVzLmgiCgpzdHJ1Y3QgSXRlbQp7CiAgICBzdHJpbmcgbmFtZTsKICAgIGludCBpaWQ7CiAgICBkb3VibGUgdmFsdWU7CiAgICAvKiAuIC4gLiAqLwp9OwoKLy8gaG93IGNvbWUgdGhpcyBvcGVyYXRvciB3b3JrcywgYW5kIEkgaGF2ZW4ndCBhZGRyZXNzZWQgJ1xuJyBleHBsaWNpdGx5PwoKaXN0cmVhbSYgb3BlcmF0b3IgPj4gKGlzdHJlYW0mIGlzLCBJdGVtJiBpdGVtKQp7CiAgICBzdHJpbmcgbmFtZTsKICAgIGludCBpaWQ7CiAgICBkb3VibGUgdmFsdWU7CiAgICBjaGFyIGNoMTsKICAgIGNoYXIgY2gyOwogICAgaXMgPj4gY2gxOwogICAgaWYgKGNoMSAhPSAneycpCiAgICB7CiAgICAgICAgZXJyb3IoIkJhZCBmb3JtbWF0dGluZyIpOwogICAgfQogICAgaXMgPj4gbmFtZTsKICAgIGlzID4+IGlpZDsKICAgIGlzID4+IHZhbHVlOwogICAgaXMgPj4gY2gyOwogICAgaWYgKGNoMiAhPSAnfScpCiAgICB7CiAgICAgICAgZXJyb3IoIkJhZCBmb3JtbWF0dGluZyIpOwogICAgfQogICAgaXRlbS5uYW1lID0gbmFtZTsKICAgIGl0ZW0uaWlkID0gaWlkOwogICAgaXRlbS52YWx1ZSA9IHZhbHVlOwp9Cgp2b2lkIHByaW50VmVjdG9yKGNvbnN0IHZlY3RvcjxJdGVtPiYgYXJnKQp7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZy5zaXplKCk7IGkrKykKICAgIHsKICAgICAgICBjb3V0IDw8IGFyZ1tpXS5uYW1lIDw8ICIgIiA8PCBhcmdbaV0uaWlkIDw8ICIgIiA8PCBhcmdbaV0udmFsdWUgPDwgZW5kbDsKICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICAvLyAxLiBEZWZpbmUgYSBzdHJ1Y3QgSXRlbSB7IHN0cmluZyBuYW1lOyBpbnQgaWlkOyBkb3VibGUgdmFsdWU7IC8qIC4gLiAuICovIH07LCBtYWtlIGEgdmVjdG9yPEl0ZW0+LCB2aSwgYW5kIGZpbGwgaXQKICAgIC8vIHdpdGggdGVuIGl0ZW1zIGZyb20gYSBmaWxlLgogICAgaWZzdHJlYW0gaXN7IkRyaWxscy50eHQifTsKICAgIHZlY3RvcjxJdGVtPiBpdGVtczsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykKICAgIHsKICAgICAgICBJdGVtIHRlbXA7CiAgICAgICAgaXMgPj4gdGVtcDsKICAgICAgICBpdGVtcy5wdXNoX2JhY2sodGVtcCk7CiAgICB9CiAgICAvLyAyLiBTb3J0IHZpIGJ5IG5hbWUuCiAgICBzb3J0KGl0ZW1zLmJlZ2luKCksIGl0ZW1zLmVuZCgpLCBbXShjb25zdCBJdGVtJiBpdGVtMSwgY29uc3QgSXRlbSYgaXRlbTIpIHtyZXR1cm4gaXRlbTEubmFtZSA8IGl0ZW0yLm5hbWU7IH0pOwogICAgcHJpbnRWZWN0b3IoaXRlbXMpOwogICAgY291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIDw8IGVuZGw7CiAgICAvLyAzLiBTb3J0IHZpIGJ5IGlpZC4KICAgIHNvcnQoaXRlbXMuYmVnaW4oKSwgaXRlbXMuZW5kKCksIFtdKGNvbnN0IEl0ZW0mIGl0ZW0xLCBjb25zdCBJdGVtJiBpdGVtMikge3JldHVybiBpdGVtMS5paWQgPCBpdGVtMi5paWQ7IH0pOwogICAgcHJpbnRWZWN0b3IoaXRlbXMpOwogICAgY291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIDw8IGVuZGw7CiAgICAvLyA0LiBTb3J0IHZpIGJ5IHZhbHVlOyBwcmludCBpdCBpbiBvcmRlciBvZiBkZWNyZWFzaW5nIHZhbHVlIChpLmUuLCBsYXJnZXN0IHZhbHVlIGZpcnN0KS4KICAgIHNvcnQoaXRlbXMuYmVnaW4oKSwgaXRlbXMuZW5kKCksIFtdKGNvbnN0IEl0ZW0mIGl0ZW0xLCBjb25zdCBJdGVtJiBpdGVtMikge3JldHVybiBpdGVtMS52YWx1ZSA+IGl0ZW0yLnZhbHVlOyB9KTsKICAgIHByaW50VmVjdG9yKGl0ZW1zKTsKICAgIGNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA8PCBlbmRsOwogICAgLy8gNS4gSW5zZXJ0IEl0ZW0oJ2hvcnNlIHNob2UnLDk5LDEyLjM0KSBhbmQgSXRlbSgnQ2Fub24gUzQwMCcsIDk5ODgsNDk5Ljk1KS4KICAgIGl0ZW1zLnB1c2hfYmFjayhJdGVteyJob3JzZSBzaG9lIiwgOTksIDEyLjM0fSk7CiAgICBpdGVtcy5wdXNoX2JhY2soSXRlbXsiQ2Fub24gUzQwMCIsIDk5ODgsIDQ5OS45NX0pOwogICAgLy8gNi4gUmVtb3ZlIChlcmFzZSkgdHdvIEl0ZW1zIGlkZW50aWZpZWQgYnkgbmFtZSBmcm9tIHZpLgogICAgc3RyaW5nIGZpcnN0TmFtZSwgc2Vjb25kTmFtZTsKICAgIGNpbiA+PiBmaXJzdE5hbWUgPj4gc2Vjb25kTmFtZTsKICAgIGZvciAoYXV0byBpdCA9IGl0ZW1zLmJlZ2luKCk7IGl0ICE9IGl0ZW1zLmVuZCgpOyBpdCsrKQogICAgewogICAgICAgIGlmICgoaXQtPm5hbWUgPT0gZmlyc3ROYW1lKSB8fCAoaXQtPm5hbWUgPT0gc2Vjb25kTmFtZSkpCiAgICAgICAgewogICAgICAgICAgICBpdGVtcy5lcmFzZShpdCk7CiAgICAgICAgfQogICAgfQogICAgcHJpbnRWZWN0b3IoaXRlbXMpOwogICAgY291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIDw8IGVuZGw7CiAgICAvLyA3LiBSZW1vdmUgKGVyYXNlKSB0d28gSXRlbXMgaWRlbnRpZmllZCBieSBpaWQgZnJvbSB2aS4KICAgIGludCBpaWQxLCBpaWQyOwogICAgY2luID4+IGlpZDEgPj4gaWlkMjsKICAgIGZvciAoYXV0byBpdCA9IGl0ZW1zLmJlZ2luKCk7IGl0ICE9IGl0ZW1zLmVuZCgpOyBpdCsrKQogICAgewogICAgICAgIGlmICgoaXQtPmlpZCA9PSBpaWQxKSB8fCAoaXQtPmlpZCA9PSBpaWQyKSkKICAgICAgICB7CiAgICAgICAgICAgIGl0ZW1zLmVyYXNlKGl0KTsKICAgICAgICB9CiAgICB9CiAgICBwcmludFZlY3RvcihpdGVtcyk7Cn0K