Fortran から C++ に移行するコードがあり、元の F77 コードで作成しなければならなかったネストされた for ループ構造の一部を回避したいと考えています。
問題は次のとおりです。ノードと呼ばれるオブジェクトのベクトルがあり、それぞれが (他の重要な情報の中でも) 接続されている他のノード オブジェクトのインデックス (接続グラフ) を保持するベクトルを含んでいます。このような
struct Node {
vector<int> conNode;
};
vector<Node> listOfNodes;
vector<int> nodeListA; // a subset of nodes of interest stored as their vector indices
nodeListA 内のノードが接続されているノードを探す必要がありますが、それらのノードが nodeListA 内にもある場合に限られます。現在、私のコードは次のようになっています。
// Loop over the subset of node indices
for (int i=0; i<nodeListA.size(); i++) {
// Loop over the nodes connected to the node i
for (int j=0; j<listOfNodes[nodeListA[i]].conNode.size(); j++) {
// Loop over the subset of node indices again
for (int k=0; k<nodeListA.size(); k++) {
// and determine if any of node i's connections are in the subset list
if (nodeListA[k] == listOfNodes[nodeListA[i]].conNode[j]) {
// do stuff here
}
}
}
}
これを行うには、もっと簡単な方法が必要です。この方法を複雑にしすぎているようです。おそらく標準アルゴリズムライブラリを使用して、このコードを単純化するにはどうすればよいですか?