首页 > 代码库 > C++关联容器的使用实例
C++关联容器的使用实例
#include <iostream> #include <set> #include <string> #include <map> #include <vector> #include <fstream> #include <sstream> using namespace std; class TextQuery { public: typedef vector<string>::size_type line_no; TextQuery(){}; void read_file(ifstream &is) { store_file(is); build_map(); } string text_line(line_no) const; set<line_no> run_query(const string &) const; private: vector<string> lines; map< string, set<line_no> > word_map; void store_file(ifstream &is); int build_map(); }; void TextQuery::store_file(ifstream &is) { string line; while(getline(is,line)) lines.push_back(line); } int TextQuery::build_map() { vector<string>::size_type i; string word; for(i=0; i<lines.size(); i++) { istringstream ss(text_line(i+1)); while(ss>>word) word_map[word].insert(i+1); } return 0; } string TextQuery::text_line(line_no line) const { if(line <= lines.size()) return lines[line-1]; else { cout<<"line number out of range"<<endl; return string(); } } set<TextQuery::line_no> TextQuery:: run_query(const string & str) const { map< string, set<line_no> >::const_iterator iter = word_map.find(str); if( iter != word_map.end()) { return iter->second; } else { cout<<"cant find word match "<<str<<endl; return set<line_no>(); } } int main(void) { TextQuery tq; set<TextQuery::line_no> set; //这里定义一个普通set类型都会报:typename is not allowed //set<int> a; ofstream out; ifstream in; string str1("I love apple"); string str2("I love banana"); string str3("apple love me"); out.open("temp"); out<<str1<<endl<<str2<<endl<<str3<<endl; out.close(); in.open("temp"); if(!in) cout<<"error"<<endl; //interface 1 tq.read_file(in); //interface 2 cout<<tq.text_line(1)<<endl; cout<<tq.text_line(2)<<endl; cout<<tq.text_line(3)<<endl; cout<<tq.text_line(4)<<endl; //interface 3 set = tq.run_query("I"); //这里不知道为何不能定义一个set类型的迭代器进行迭代输出 //set<TextQuery::line_no>::iterator setiter; //for(setiter=set.begin(); setiter!=set.end(); setiter++) //cout<<*setiter<<endl; system("pause"); return 0; }
这是C++primere 4上的一个例子,拿来写了一下,发现自己还真会遇到不少问题,不过写完后发现真的是对容器的操作有了更进一步的理解。
但是我的程序遇到了一个问题就是不能定义一个set容器或者迭代器在main里面,一定义就会报错,因此程序最后想通过迭代器输出set容器的结果便不了了之,通过vs调试发现set里面的内容是正确的。
希望高手给予解答。
C++关联容器的使用实例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。