#include <string>
#include <iostream>
#include <boost/tokenizer.hpp>
#include <boost/typeof/typeof.hpp>
#include <vector>
#include <fstream>
#include <map>
#include <algorithm>
#include <iterator>
using namespace std;
int load(const char* path, map<string, vector<string> > &data) {
ifstream fin(path);
if(!fin) {
return -1;
}
string line = "";
typedef boost::tokenizer< boost::char_separator<char> > tokenizer;
boost::char_separator<char> sep("\t");
for(; getline(fin, line); ) {
tokenizer tok(line, sep);
BOOST_AUTO(it, tok.begin());
string key = *it;
it++;
copy(it, tok.end(), back_inserter(data[key])); //注意名字 不是bakc_iterator, copy(it++, tok.end(), data[key].begin())不行
}
return 0;
}
int show(map<string, vector<string> > &data) {
for (BOOST_AUTO(it, data.begin()); it != data.end(); ++it) {
cout << it->first << endl;
ostream_iterator<string> osit(cout, "\n"); //输入输出iterator, 可以快速打印
copy(it->second.begin(), it->second.end(), osit);
}
return 0;
}
int main(int argc, char* argv[]) {
map<string, vector<string> > data;
load(argv[1], data);
for (BOOST_AUTO(it, data.begin()); it != data.end(); ++it) {
cout << it->first << endl;
}
show(data);
return 0;
}
Std iterator一些用法
最新推荐文章于 2024-05-24 11:14:57 发布