Boost logo

Boost :

Subject: [boost] STL::MAP: Printing values only once ..
From: Rahul Mathur (srivmuk_at_[hidden])
Date: 2014-01-17 21:29:36


Hi,

I have a input.txt file seperator by pipe '|' as -

40147|181|ORANGE|MIKE|XX||1000397900|3500
40148|373|ORANGE|BOB|XX||1078889400|4500
40149|673|ORANGE|TREY|XX||1095159900|5500

I only wish to have all the FIRST(ID=40147) and LAST FIELD(PRICE=3500) to
be printed for three lines as given above.

I am reading as -

--
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <boost/algorithm/string.hpp>
using namespace std;
struct FILE_INPUT {
        int      ID;
        int      Asset_ID;
        char    T_Name[];
        char    Symbol[];
        char    Series[];
        char    Gap;
        int       Date;
        int       price;
};
int main() {
        typedef std::map<int, int> unordmap;
        unordmap ask;
        FILE_INPUT fl_inp;
        memset( &fl_inp, 0, sizeof(fl_inp) );
        ifstream in ("input.txt");
        string s;
        const char delimiter = '|';
        while ( getline (in, s) ) {
        trim( s );
        if ( !s.empty() ) {
                stringstream strm( s );
                string item;
                getline( strm, item );
                stringstream stra( item );
                string tmp;
                getline( stra, tmp, delimiter );
                {
                       stringstream strb( tmp );
                       strb >> fl_inp.ID;
                }
                getline( stra, tmp, delimiter )
                {
                       stringstream strb( tmp );
                       strb >> fl_inp.price;
                }
                ask.insert( std::make_pair((fl_inp.ID),(fl_inp.price)) );
                unordmap::iterator pos = ask.begin();
                for (pos = ask.begin(); pos != ask.end(); ++pos) {
                        std::cout << "ID: " << pos->first << "\t"
                        << "Price: " << pos->second << std::endl;
                }
                std::cout << " " << endl;
        }
     }
}
-- 
The map is being inserted with both ID as key and price as value but while
printing it prints the values thrice as -
ID: 40147    Price: 3500
ID: 40147    Price: 4500
ID: 40148    Price: 5500
ID: 40147    Price: 3500
ID: 40148    Price: 4500
ID: 40149    Price: 5500
The MAP should print all values together only once as -
ID: 40147    Price: 3500
ID: 40148    Price: 4500
ID: 40149    Price: 5500
--
Can I maintain some checks to print all values simply once.
Thanks.

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk