Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:创建一个;“成本”/&引用;“距离”;字符串向量的矩阵_C++_String_Vector_Multidimensional Array - Fatal编程技术网

C++ C++;:创建一个;“成本”/&引用;“距离”;字符串向量的矩阵

C++ C++;:创建一个;“成本”/&引用;“距离”;字符串向量的矩阵,c++,string,vector,multidimensional-array,C++,String,Vector,Multidimensional Array,我已经研究这个问题好几天了,希望能得到一些指导 假设我有一个字符串向量‘myVec’,它的定义如下: routers[0] = X routers[1] = Y routers[2] = Zebra (请注意,这些只是向量“内部”的值,我使用push_back函数将myVec定义如下): 我还能够将这些“位置”(X、Y和Zebra)保存在称为“路由器”的字符串向量中,这样: routers[0] = X routers[1] = Y routers[2] = Zebra 我想根据“myVec

我已经研究这个问题好几天了,希望能得到一些指导

假设我有一个字符串向量‘myVec’,它的定义如下:

routers[0] = X
routers[1] = Y
routers[2] = Zebra
(请注意,这些只是向量“内部”的值,我使用push_back函数将myVec定义如下):

我还能够将这些“位置”(X、Y和Zebra)保存在称为“路由器”的字符串向量中,这样:

routers[0] = X
routers[1] = Y
routers[2] = Zebra
我想根据“myVec”创建一个“成本”矩阵,格式如下:

0 2 9
2 0 3
9 3 0
每行和每列代表“X”、“Y”和“Zebra”的位置。在第一行,它说:“X”需要0个单位才能到达“X”,而“X”需要2个单位才能到达“Y”,而“X”需要9个单位才能到达“斑马”。等。下一行相对于位置“Y”相同,最后一行相对于位置“Zebra”相同

创建成本矩阵的第一步是检索距离值(在本例中为:2、9和3)

我已经创建了一些代码,以便可以看到“myVec”的距离值,如下所示:

myVec[0] = X Y 2 //There is a distance of 2 units between 'X' and 'Y'
myVec[1] = X Zebra 9 //There is a distance of 9 units between 'X' and 'Zebra'
myVec[2] = Y Zebra 3 //There is a distance of 3 units between 'Y' and 'Zebra'
for (int i = 0; i <myVec.size(); i++)
{
    
    string s = myVec.at(i); 


    for (int j = 0; j <s.length(); j++) //going through chars of string in 'myVec' vec
    {

        if (isdigit(s[j])) //Going through myVec vector, and checking the numerical distance value
        {
            int dist = s[j] - '0'; //Converting the char to int
            cout<<dist<<endl;
        }
    }
        



}

for(inti=0;i首先将您的
myVec
转换为一些可用的结构,如

struct edge
{
    std::string from;
    std::string to;
    int dist;
};
然后创建一个从字符串位置名称到索引的映射。例如,首先将所有可能的位置存储在
std::set
中,然后使用该映射创建一个
std::map l2i

创建二维数组并存储所有已知距离。
距离[i][i]=0;
距离[l2i[from]][l2i[to]=dist;

最后使用计算APSP并生成矩阵

还可以使用
std::stoi
将字符串转换为int。这不是你的减法。因为这只适用于一位数的距离

编辑: 从X到斑马只需要5个单位。X-(2)>Y-(3)>Zerbra。如果你只想让你的矩阵没有APSP,你也可以这样做
<代码>距离[L2I[O] ] = DIST;距离[L2I[to] ] [L2I[O] ] = DIST;< /Calp>

<代码> MyVEC(0)=x y 2 < < /C> >不是C++。请创建适当的hello!对不起,我刚刚编辑了我的问题。为了定义向量,但我只是把向量索引,以便能够在向量位置上保持这些值。索引不是问题。问题是我们不知道向量的类型是什么,我们不知道什么是代码> x斑马9 < /Cord>是因为它不是有效的C++代码。我们不能猜测,因为这会浪费我们的T。输入法。请创建一个。