# Transform vector of user-defined objects to a multi-map : transform « Map Multimap « C++

Home
C++
 1 Bitset 2 Class 3 Console 4 Data Structure 5 Data Type 6 Deque 7 Development 8 File 9 Function 10 Generic 11 Language 12 List 13 Map Multimap 14 Overload 15 Pointer 16 Qt 17 Queue Stack 18 Set Multiset 19 STL Algorithms Binary search 20 STL Algorithms Heap 21 STL Algorithms Helper 22 STL Algorithms Iterator 23 STL Algorithms Merge 24 STL Algorithms Min Max 25 STL Algorithms Modifying sequence operations 26 STL Algorithms Non modifying sequence operations 27 STL Algorithms Sorting 28 STL Basics 29 String 30 Valarray 31 Vector
 C++ » Map Multimap » transform

Transform vector of user-defined objects to a multi-map
 ```     #include  #include  #include  #include  #include  #include  #include  #include  using namespace std; class PC {    public:    enum PC_type { Dell, HP, IBM, Compaq };    PC( PC_type appliance = Dell, int model = 220,       int serial = 0 );    bool operator<( const PC& rhs ) const;    PC_type appliance() const;    int model() const;    string name() const;    void print() const;    int serial() const;    private:    PC_type appliance_;    int model_;    int serial_; }; inline PC::PC( PC::PC_type appliance, int model,int serial )    : appliance_( appliance ), model_( model ), serial_( serial ) {} // empty inline bool PC::operator<( const PC& rhs ) const { return appliance() < rhs.appliance() ||    ( appliance() == rhs.appliance() && model() < rhs.model() ); } inline PC::PC_type PC::appliance() const { return appliance_; } inline int PC::model() const { return model_; } string PC::name() const {    string what;    switch( appliance() )    {       case Dell:    what = "Dell";              break;       case HP:      what = "HP";                break;       case IBM:     what = "IBM";               break;       case Compaq:  what = "Compaq";            break;       default:      what = "Unknown appliance"; break;    }    return what; } inline void PC::print() const {    char oldfill = cout.fill();    cout << name() << " - Model "         << model() << ", Serial number "          << serial() << endl; } inline int PC::serial() const { return serial_; } bool greater_model( const pair p,int min_model ); int main( ) {    const PC::PC_type kind[] = { PC::IBM,PC::IBM, PC::Dell, PC::HP,PC::HP, PC::HP };    const int num_appliances = 3;    vector v;    for( int i = 0; i < num_appliances; ++i )       v.push_back( PC( kind[i], i, i ) );    map sold;    transform( kind, kind+num_appliances, v.begin(),inserter( sold, sold.end() ),make_pair );    map::const_iterator sold_end = sold.end();    // work with a multimap. key is appliance type, value is PC    typedef multimap PC_multimap_type;    PC_multimap_type stock;    const PC desired( PC::HP );        // load the appliances into the multimap    transform( kind, kind+num_appliances, v.begin(),inserter( stock, stock.end() ), make_pair );    PC_multimap_type::const_iterator stock_end = stock.end();    // search for first occurrence of key    PC_multimap_type::const_iterator spot = stock.find( desired.appliance() );    if( spot != stock_end )       spot->second.print();    else       cout << "Don't have a " << desired.name() << " in stock\n"; } inline bool greater_model( const pair p,int min_model ) { return p.second.model() >= min_model; }                     ```
Related examples in the same category
 1 Use transform to fill a map from a vector of user-defined object 2 use transform() to create map from two arrays