C++でネットワークの次数を求める
test.net
1 3
2 3
4 5
2 1
#include<stdio.h> #include<iostream> #include<map> #include<string> #include<fstream> #include<vector> #include<set> int main(){ using namespace std; FILE *fp; std::string index; std::string value; std::string str; string str2; std::vector<string> in1; std::vector<string> out1; //new str(1000); std::map<std::string,int> indegree; std::map<std::string,int> outdegree; std::set<std::string> nodelist; std::ifstream ifs("test.net"); while(ifs && getline(ifs,str)){ str=strtok(const_cast<char*>(str.c_str())," "); str2=(strtok(NULL," ")); //data[str]=data[str]+str2; /* if(data.find(str)!=data.end()){ data[(str)]=str2+data[(str)]; }else{ data[(str)]=str2; } */ in1.push_back(str); out1.push_back(str2); nodelist.insert(str); nodelist.insert(str2); } set<string>::iterator it1=nodelist.begin(); while(it1 != nodelist.end()){ indegree[*it1]=0; outdegree[*it1]=0; ++it1; } int i; for(i=0;i<in1.size();i++){ indegree[in1[i]]++; outdegree[out1[i]]++; } it1=nodelist.begin(); while(it1!=nodelist.end()){ cout << (*it1) <<" "<<indegree[*it1]<<" "<<outdegree[*it1]<<endl ; ++it1; } return 0; }