动态地向std :: string 2d向量数组添加行

时间:2016-11-04 20:21:23

标签: c++ arrays multidimensional-array vector push-back

我试图创建一个动态的2d std :: string向量,但无法添加新行:

std::vector<std::vector<std::string>> hops_vector;

int Hop = 0;

for (Hop = 0; Hop < RouteHops; Hop++)
{
    char HopIPString[20];
    HopIPString[0] = 0;
    RouteTestGetHopTimedOut(TestHandle, Hop, &HopTimedOut);
    std::string thehop = std::to_string(Hop + 1);

    //If the hop hasn't been registered yet
    if (hopsstring.find(thehop) == std::string::npos) {
        vector<int> row; // Create an empty row
        hopsstring += thehop+","; // Add hop number to hop string

        //Add columns for pings per hop + IP and Loss/No Loss
        for (int j = 0; j < PingsPerHop+2; j++) {
            row.push_back(j); // Add an element (column) to the row
        }

        hops_vector.push_back(row); // Add the row to the main vector
        hops_vector[Hop][0] = thehop;
    }
}

hops_vector.push_back(row);给了我一个没有重载错误的例子。我假设因为hops_vector是一个std :: string向量。将它更改为int可以解决该问题,但是我无法将字符串添加到向量中!

1 个答案:

答案 0 :(得分:0)

来自评论:

修复编译器错误的简单方法是将vector<int> row;替换为std::vector<std::string> row(PingsPerHop+2, "");(创建一个填充&#34的向量;空&#34;字符串)并删除for循环试图填补它。

然而,由于@PaulMcKenzie使用std::map<std::string, std::vector<int>>指出了一种不同的方法,其中字符串是跳数,并且包含与之关联的整数的向量(最有可能)是一种更好的方法(效率和概念上)