|
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