Вектор <std :: pair>, инициализирующий индекс 0 с неверными значениями c ++ - PullRequest
0 голосов
/ 05 мая 2018

У меня есть программа, в которой я беру csv-файл, разделяю строки и сохраняю их в vector<std::pair<string, float>>

В целом программа должна использовать алгоритм Дейкстры, но сейчас это не проблема.

Я создал свой собственный оператор печати, чтобы проверить, что правильные значения были помещены в соответствующее место. Но проблема в том, что индекс 0 сначала не имеет ничего, а второй - 0, а затем все остальное работает как обычно.

В своем заголовке я объявляю свой вектор следующим образом:

  std::vector<std::pair<std::string, float>> curr_graph; //vector that hold a pair, string = currency name, int = bribe cost

В моем cpp-файле единственная используемая функция - это node_input () и моя функция печати

void graph::node_input()
{
    //grabs first line of csv file (aka the nodes)
    string s;
    getline(cin, s);
    for(int i = 0; i < s.length(); i++)
        if(s[i] == ',') amount_of_nodes++; 

    std::stringstream ss(s);
    string token;
    while(getline(ss, token, ',')) //splits up the string by commas, ex: Dollar (1.2),Peso (6) will be split up
    {
        std::stringstream sss(token);
        string split;
        int counter = 0;
        string temp;
        float bribe = 0;

        while(getline(sss, split, ' '))//splits up the newly split up string bu spaces, ex: Dollar (1.2) will be split up by the space
        {
            if(counter % 2 == 0)//this condition is when the string split is the currency
                temp = split;
            else //this condition will take to bribe cost and convert to a float
            {
                split.pop_back();//removes )
                split.erase(0,1);//removes (
                bribe = std::stof(split.c_str(), 0);//converts to float
            }
            counter++;
        }
        curr_graph.push_back(std::make_pair(temp, bribe));        
    }
    //cout << curr_graph.size();
    //cout << curr_graph.capacity();
    //cout << endl << curr_graph.front() << endl;
    print(curr_graph);
}

void graph::print(std::vector<std::pair<std::string, float>> &v)
{
    for(int i = 0; i < v.size(); i++)
    {
        cout << v[i].first << " " << v[i].second << endl;
    }
}

мой пример входного файла: (скомпилирован с использованием <) </p>

,Dollar (1.2),Peso (6),Pound (2),Euro (3),Franc (12)
Dollar (1.2),0,1.5,0,2.5,0
Peso (6),0,0,1.2,5.7,0
Pound (2),2,0,0,0,0
Euro (3),0.9,0,3,0,0
Franc (12),0,0,0,15,0
,,,,,
What is the shortest path from Pesos to Euros?,,,,,

и вот мой вывод, который я получаю из оператора print, который вызывается в моей функции node_input ():

  0
 Dollar 1.2
 Peso 6
 Pound 2
 Euro 3
 Franc 12
...