用向量向量对网络建模 我试图用C++来模拟一个网络。我有一个名为NetworkConnection的结构: struct NetworkConnection { int i, j, weight; }

用向量向量对网络建模 我试图用C++来模拟一个网络。我有一个名为NetworkConnection的结构: struct NetworkConnection { int i, j, weight; },c++,stl,C++,Stl,我有一门课叫网络 class Network { public: std::vector<NetworkConnection> connections_for(int i) { return connections[i]; } void connect(int i, int j, int weight) { NetworkConnection connection; connection.i = i; con

我有一门课叫网络

class Network {
  public:
    std::vector<NetworkConnection> connections_for(int i) {
      return connections[i];
    }
    void connect(int i, int j, int weight) {
      NetworkConnection connection;
      connection.i = i;
      connection.j = j;
      connection.weight = weight;
      connections[i].push_back(connection)
    }
  private:
    std::vector< std::vector<NetworkConnection> > connections;
}
类网络{
公众:
标准::矢量连接(int i){
返回连接[i];
}
无效连接(整数i、整数j、整数权重){
网络连接;
连接i=i;
连接。j=j;
连接重量=重量;
连接[i]。推回(连接)
}
私人:
std::vector连接;
}
现在我的问题是,在为(I)调用connections_时,特别是在复制构造函数中,我会遇到segfaults。然而,令人困惑的是,segfault的精确情况在应用程序的不同运行中有所不同。我尝试过使用指针向量和指针向量向量,如下所示:

std::vector< std::vector<NetworkConnection> * > connections;
std::vector< std::vector<NetworkConnection *> > connections;
std::vector连接;
std::vector连接;
对界面进行了适当的调整,但这并没有解决问题。现在我不知道如何解决这个问题


我做错了什么?或者,你如何在C++中用类似于上面的接口来模拟一个网络?

< p>段故障问题通常来自于向量的不适当或不初始化。将向量定义为

vector<vector<xxx> > xx;
您要使用地图:

class Network {
  public:
    std::vector<NetworkConnection> connections_for(int i) {
      return connections[i];
    }
    void connect(int i, int j, int weight) {
      NetworkConnection connection;
      connection.i = i;
      connection.j = j;
      connection.weight = weight;
      connections[i].push_back(connection);
    }
  private:
    std::map<int, std::vector<NetworkConnection> > connections;
};
类网络{
公众:
标准::矢量连接(int i){
返回连接[i];
}
无效连接(整数i、整数j、整数权重){
网络连接;
连接i=i;
连接。j=j;
连接重量=重量;
连接[i]。推回(连接);
}
私人:
映射连接;
};
您甚至可能想要使用地图地图:

class Network {
  public:
    std::map<int, NetworkConnection> &connections_for(int i) {
      return connections[i];
    }
    void connect(int i, int j, int weight) {
      NetworkConnection connection;
      connection.i = i;
      connection.j = j;
      connection.weight = weight;
      std::map<int, NetworkConnection> &map = connections_for(i);
      map[j] = connection;
    }
  private:
    std::map<int, std::map<int, NetworkConnection> > connections;
};
类网络{
公众:
标准::映射和连接(int i){
返回连接[i];
}
无效连接(整数i、整数j、整数权重){
网络连接;
连接i=i;
连接。j=j;
连接重量=重量;
std::map&map=连接(i);
map[j]=连接;
}
私人:
映射连接;
};

我的SEGFULT问题与此无关。然而,我在建模我的网络时确实采用了这种方法。
class Network {
  public:
    std::map<int, NetworkConnection> &connections_for(int i) {
      return connections[i];
    }
    void connect(int i, int j, int weight) {
      NetworkConnection connection;
      connection.i = i;
      connection.j = j;
      connection.weight = weight;
      std::map<int, NetworkConnection> &map = connections_for(i);
      map[j] = connection;
    }
  private:
    std::map<int, std::map<int, NetworkConnection> > connections;
};