C++でネットワークの次数を求める

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;
}